繁体   English   中英

如何将数据传递到 Django 表单中?

[英]How do you pass data into a Django form?

我正在使用 Django 4.0,我正在尝试创建一个 web 应用程序,用户可以在其中从下拉列表 Django 表单中进行选择。 但是,选择会因问题而异,我希望表格能够适应这一点。

这是我在 forms.py 中的内容:

class QuestionAnswerForm(forms.Form):
def __init__(self, q_id, *args, **kwargs):
    self.q_id = q_id
    super(QuestionAnswerForm, self).__init__(*args, **kwargs)

q_id = self.q_id  # this line throws an error
question = Question.objects.get(pk=q_id)
choice = forms.ChoiceField(choices=get_choices(question))

但是,我收到错误消息:未定义名称“self”。 我只想知道一种将问题 ID 传递给表单的简单方法,以便 get_choices function 可以返回需要在表单上显示的选项。

在 views.py 中,我对问题的看法以这种方式开始设置表单:

def question_detail_view(request, q_id):
    print(f"Question id is {q_id}")
    form = QuestionAnswerForm(request.POST or None, q_id=q_id)

我的问题是:如何访问 QuestionAnswerForm class 中的 q_id?

我发现了如何使用Passing **kwargs to Django Form来做到这一点:

forms.py:

class QuestionAnswerForm(forms.Form):

    def __init__(self, *args, **kwargs):
        q_id = kwargs.pop('q_id')
        super(QuestionAnswerForm, self).__init__(*args, **kwargs)

        if q_id:
            self.fields['choice'].choices = get_choices(Question.objects.get(pk=q_id))

    choice = forms.ChoiceField()

意见.py:

def question_detail_view(request, q_id):
    form = QuestionAnswerForm(request.POST or None, q_id=q_id)

我相信一个解决方案是在创建模型时:

  1. 创建问题 model
  2. 创建选项 model 并将其链接到特定问题

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM