如何在Django中将参数传递给表单?

时间:2020-10-17 13:19:15

标签: django

因此,正如标题所述,我正在尝试将参数从视图传递到表单。我已经看到了几篇有关此问题的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'”。这是什么问题?

1 个答案:

答案 0 :(得分:2)

当您将FormSetform_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
相关问题