因此,正如标题所述,我正在尝试将参数从视图传递到表单。我已经看到了几篇有关此问题的Stack Overflow帖子,但都没有解决我的问题:(
因此,我要构建的基本上是一个问答应用程序。每个用户回答预先提供的问题。我想为每个对应的问题制作一个答案模板。
这是我的代码:
forms.py
class AnswerForm(forms.ModelForm):
main_answer = formsCharField(required=True)
# Some other fields
def __init__(self, *args, **kwargs):
self.q = kwargs.pop('q')
super(AnswerForm, self).__init__(*args, **kwargs)
self.fields['main_answer'].label = q.main_question
views.py
def createAnswer(request, pk):
thisQuestion = Question.objects.get(question_number=pk)
AnswerFormSet = modelformset_factory(Answer, form=AnswerForm(q = thisQuestion), extra=1)
formset = AnswerFormSet(queryset=Answer.objects.filter(authuser=request.user.id, question_number=pk))
# And some other codes
我应该使用{% crispy_formset%}
在模板中显示此表单集。但是,我一直收到此错误:“未定义名称'q'”。这是什么问题?
答案 0 :(得分:2)
当您将FormSet
与form_kwargs=…
parameter [Django-doc]一起构造时,您会通过这些密码:
def createAnswer(request, pk):
thisQuestion = Question.objects.get(question_number=pk)
AnswerFormSet = modelformset_factory(Aswer, form=AnswerForm, extra=1)
formset = AnswerFormSet(
form_kwargs={'q': thisQuestion},
queryset=Answer.objects.filter(authuser=request.user.id, question_number=pk)
)
由于在q
方法中使用了__init__
,但未定义q
,因此也会出现名称错误:
class AnswerForm(forms.ModelForm):
main_answer = formsCharField(required=True)
# Some other fields
def __init__(self, *args, **kwargs):
# ↓ assign to a local variable q
q = self.q = kwargs.pop('q')
super(AnswerForm, self).__init__(*args, **kwargs)
self.fields['main_answer'].label = q.main_question