Django 1.11将kwarg传递到模型表单字段
我想通过一个kwarg来设置一个modelform字段,但我正在努力想办法 我的网址如下: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
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中的其他方法?