Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Django 1.11将kwarg传递到模型表单字段_Django_Django Forms_Django Views - Fatal编程技术网

Django 1.11将kwarg传递到模型表单字段

Django 1.11将kwarg传递到模型表单字段,django,django-forms,django-views,Django,Django Forms,Django Views,我想通过一个kwarg来设置一个modelform字段,但我正在努力想办法 我的网址如下: url(r'^tent/create/(?P<munc>\d+)',views.TentCreate.as_view(),name='tent_create'), 我的表格: class TentForm(ModelForm): class Meta: model = Tent exclude =('asfo','niho') def __i

我想通过一个kwarg来设置一个modelform字段,但我正在努力想办法

我的网址如下:

url(r'^tent/create/(?P<munc>\d+)',views.TentCreate.as_view(),name='tent_create'),
我的表格:

class TentForm(ModelForm):
    class Meta:
        model = Tent
        exclude =('asfo','niho')

    def __init__(self, *args, **kwargs):
        super(TentForm, self).__init__(*args, **kwargs)
        self.fields['primary'].queryset = Mark.objects.filter(munc=self.kwargs['munc'])
从模型中:

class Tent(models.Model):
    primary = models.ForeignKey(Mark,on_delete=models.CASCADE)
我可以在不覆盖
def\uu init
的情况下渲染表单,并且不对“primary”字段应用过滤

但是,尝试使用我上面描述的
def\uu init
代码将
munc
kwarg传递到表单字段会导致以下错误: “'TentForm'对象没有属性'kwargs'”

我一直在努力解决这个问题,所以如果有人能为我提供一些指导来解决这个问题,我将不胜感激。这是我的第一个Django项目,所以我正在学习如何去做,所以我假设我在这里的某个地方犯了一些基本错误

class TentCreate(CreateView):
    form_class = TentForm

    def get_form(self, form_class=None):
        if form_class is None:
            form_class = self.get_form_class()
        kwargs = self.get_form_kwargs()
        print(kwargs, self.kwargs)
        kwargs.update(self.kwargs)
        return form_class(**kwargs)
forms.py

class TentForm(ModelForm):
    class Meta:
        model = Tent
        exclude =('asfo','niho')

    def __init__(self, *args, **kwargs):
        munc=self.kwargs['munc']
        super(TentForm, self).__init__(*args, **kwargs)
        self.fields['primary'].queryset = Mark.objects.filter(munc=munc)
在调用
super(TentForm,self)之前必须先弹出munc.\uuuu init\uuuu(*args,**kwargs)

forms.py

class TentForm(ModelForm):
    class Meta:
        model = Tent
        exclude =('asfo','niho')

    def __init__(self, *args, **kwargs):
        munc=self.kwargs['munc']
        super(TentForm, self).__init__(*args, **kwargs)
        self.fields['primary'].queryset = Mark.objects.filter(munc=munc)

您必须在调用super(TentForm,self)之前弹出munc。\uuuu init\uuuu(*args,**kwargs)尝试覆盖
get\u form\u kwargs
方法:

视图.py

class TentCreate(CreateView):
    model = Tent
    form_class = TentForm

    def get_form_kwargs(self):
        kwargs = super(TentCreate, self).get_form_kwargs()
        kwargs.update({'munc': self.kwargs['munc']})
        return kwargs
class TentForm(ModelForm):
    class Meta:
        model = Tent
        exclude =('asfo','niho')

    def __init__(self, *args, **kwargs):
        munc = kwargs.pop('munc')
        super(TentForm, self).__init__(*args, **kwargs)
        self.fields['primary'].queryset = Mark.objects.filter(munc=munc)
forms.py

class TentCreate(CreateView):
    model = Tent
    form_class = TentForm

    def get_form_kwargs(self):
        kwargs = super(TentCreate, self).get_form_kwargs()
        kwargs.update({'munc': self.kwargs['munc']})
        return kwargs
class TentForm(ModelForm):
    class Meta:
        model = Tent
        exclude =('asfo','niho')

    def __init__(self, *args, **kwargs):
        munc = kwargs.pop('munc')
        super(TentForm, self).__init__(*args, **kwargs)
        self.fields['primary'].queryset = Mark.objects.filter(munc=munc)

尝试覆盖
get\u form\u kwargs
方法:

视图.py

class TentCreate(CreateView):
    model = Tent
    form_class = TentForm

    def get_form_kwargs(self):
        kwargs = super(TentCreate, self).get_form_kwargs()
        kwargs.update({'munc': self.kwargs['munc']})
        return kwargs
class TentForm(ModelForm):
    class Meta:
        model = Tent
        exclude =('asfo','niho')

    def __init__(self, *args, **kwargs):
        munc = kwargs.pop('munc')
        super(TentForm, self).__init__(*args, **kwargs)
        self.fields['primary'].queryset = Mark.objects.filter(munc=munc)
forms.py

class TentCreate(CreateView):
    model = Tent
    form_class = TentForm

    def get_form_kwargs(self):
        kwargs = super(TentCreate, self).get_form_kwargs()
        kwargs.update({'munc': self.kwargs['munc']})
        return kwargs
class TentForm(ModelForm):
    class Meta:
        model = Tent
        exclude =('asfo','niho')

    def __init__(self, *args, **kwargs):
        munc = kwargs.pop('munc')
        super(TentForm, self).__init__(*args, **kwargs)
        self.fields['primary'].queryset = Mark.objects.filter(munc=munc)

你好,谢谢你的回复。我使用了您的代码,但仍然得到错误:“'TentForm'对象没有属性'kwargs'”munc=self.kwargs['munc']from def”\uu init是触发属性错误的地方您是否在TentCreate中添加了方法get\u form?是使用:def get\u form(self,form\u class=None):如果form_class为None:form_class=self.get_form_class()kwargs=self.get_form_kwargs()kwargs.update(self.kwargs)返回form_class(**kwargs)是否重写了TentCreate或CreateView中的其他方法?您好,谢谢您的回复。我使用了您的代码,但仍然得到错误:“'TentForm'对象没有属性'kwargs'”munc=self.kwargs['munc']from def”\uu init是触发属性错误的地方您是否在TentCreate中添加了方法get\u form?是使用:def get\u form(self,form\u class=None):如果form_class为None:form_class=self.get_form_class()kwargs=self.get_form_kwargs()kwargs.update(self.kwargs)返回form_class(**kwargs)是否重写了TentCreate或CreateView中的其他方法?