[我正在尝试将动态查询集从url kwarg添加到模型形式字段中。 我正在构建一个在数据结构中利用高度规范化的Web应用程序。为了防止过多的空记录和数据库膨胀,有许多多对多和一对多的关系。我想向模型添加更多条目,同时从model.choice字段中排除现有条目。

问题描述 投票:0回答:1
我的代码如下所示:表格:

class ExtraAddForm(forms.ModelForm): def __init__(self, url_kwarg, *args, **kwargs): super(ExtraAddForm, self).__init__(self, *args, **kwargs) list_to_exclude = [] query_target = models.Model.objects.get(fk_id=url_kwarg) for object in query_target: list_to_exclude.append(object.fk_id.id) new_queryset = models.Model.objects.exclude(fk_id__in=list_to_exclude) self.fields['fk_id'].queryset= new_queryset class Meta: model = models.Model fields= ['fk_id','field_b'}

视图:

class AddOjbectsView(FormView): 


    formset = formset_factory(ExtraAddForm(url_kwarg), can_delete=True)
    model = models.Model
    url_kwarg = 'url_kwarg'
    form_class = formset
    template_name = 'some-template.html'
    extra_context = {'some_object': models.Model2.objects.all,
                     'model_object': models.Model.objects.all,
                     'formset': formset,
                     'view_type_create': True
                     }

    def __init__(self, *args, **kwargs):
         kwargs['url_kwarg']= self.kwargs.get(self.url_kwarg)
         super().__init__(self,*args,**kwargs)

    def get(self, request, *args, **kwargs):
        request.session['url_kwarg'] = self.kwargs.get(self.url_kwarg)
        return super().get(self, request, *args, **kwargs)

    def post(self, request, *args, **kwargs):
        #this works so I'm not re-typing it


    def get_context_data(self, **kwargs):
        """Insert the form into the context dict."""

        if 'url_kwarg' not in kwargs:
            kwargs['url_kwarg'] = self.kwargs.get(self.url_kwarg)
        return super().get_context_data(**kwargs)
        #this works, but only in the get_context. Its not working as a solution to my problem.

    def get_success_url(self):
        #this works, not re-typing

我的模板具有可处理多个表单集的Javascript,并且我已经使用非动态查询集对其进行了测试。我唯一遇到的麻烦是从URL中获取关键字参数,并将其传递给

init。
的形式。

我正在构建一个在数据结构中利用高度规范化的Web应用程序。为了防止过多的空记录和数据库膨胀,有许多多对多和一对多的关系。我想...

django-forms django-class-based-views django-sessions django-model-field
1个回答
0
投票
class AddOjbectsView(FormView): def get_form_kwargs(self): form_kwargs = super().get_form_kwargs() form_kwargs['url_kwarg'] = self.kwargs['url_kwarg'] return form_kwargs
© www.soinside.com 2019 - 2024. All rights reserved.