【发布时间】:2018-11-14 09:47:24
【问题描述】:
我正在尝试关注this SO Q&A,这正是我想要做的,但使用 pk 而不是固定密钥。我的文件...
views.py
class JuryCreate(CreateView):
model = Jury
form_class = JuryCreateForm
def form_valid(self, form):
form.instance.customer_id = self.kwargs['pk']
form.instance.court_year_id = self.kwargs['yr']
return super().form_valid(form)
forms.py
class JuryCreateForm(ModelForm):
class Meta:
model = Jury
fields = [
'parent_jury',
#Other Fields
]
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.fields['parent_jury'].queryset = Jury.objects.filter(
customer_id = self.kwargs['pk']).filter(
court_year_id = self.kwargs['yr'])
如果我直接从view 转到模板,我就可以访问查询集(它提供了一个查询集对象)。但是如果我通过 ModelForm 它会抛出一个AttributeError: 'JuryCreateForm' object has no attribute 'kwargs'。基本上,我相信该请求没有传递给 ModelForm,因此它无法访问 kwargs。如何将主键放入 ModelForm 以填充字段?
我还尝试了 get_form_kwargs 方法的变体,我认为这是将这些传递给 ModelForm 的适当机制 - 我只是无法正确实现它(或在正确的类对象中得到它)。
【问题讨论】:
标签: python django python-3.x django-forms