Django 如何从视图中添加选项?

Django 如何从视图中添加选项?,django,choicefield,Django,Choicefield,我试图动态填充两个表单选择字段,即person和work 名为assign_work_to_person的视图应允许用户选择一个人,一个尚未分配给个人的作品,并且一旦提交表单,所选作品应链接到所选的人,例如,“莱昂纳多·达芬奇”应链接到“蒙娜丽莎” 我所做的是为两个字段创建带有空选项的form类 class AssignWorkToPerson(forms.Form): person = forms.ChoiceField() work = forms.ChoiceField()

我试图动态填充两个表单选择字段,即person和work

名为assign_work_to_person的视图应允许用户选择一个人,一个尚未分配给个人的作品,并且一旦提交表单,所选作品应链接到所选的人,例如,“莱昂纳多·达芬奇”应链接到“蒙娜丽莎”

我所做的是为两个字段创建带有空选项的form类

class AssignWorkToPerson(forms.Form):
    person = forms.ChoiceField()
    work = forms.ChoiceField()
然后,当用户访问assign_work_to_person视图时,检索可用人员和authorless works以填充表单字段

我尝试以这种方式动态设置这些选项:

form.fields['the_field_name'].choices = a_list_of_tuples 
当我访问视图时,模板呈现ok,所有可用选项都正确显示

问题是,当我提交表单时,两个字段都会出现验证错误,告诉我选择一个有效的选项

通过运行一些非常基本的打印测试,我意识到以这种方式填充字段实际上不会添加选项,即使它们在模板中。事实上,正如您从第二张图片中看到的,一旦我提交了表单,模板就会呈现出没有可用选项的表单

我怎样才能做到这一点

我从对类似问题的其他回答中了解到,这可以通过在我的例子中的模型中指定一个_init _;方法来实现,我想是表单,然后通过queryset关键字参数设置选项,但如果可能的话,我宁愿在视图中这样做

编辑
您正在重新初始化表单


print(form.fields['person'].choices)
form = AssignWorkToPerson(request.POST)

if form.is_valid():
应该是这样的


   if request.method == 'POST':
        form = AssignWorkToPerson(request.POST)
        # skipped
        form.fields['person'].choices = person_choices  
        if form.is_valid():
            pass

form=AssignWorkToPersonrequest.POST应该在方法检查之后位于顶部,而不是在末尾。

您在哪个函数中填充字段?get_表单将是一个很好的地方,因为它在get和POST中都被调用。我直接从视图中执行它,而不是形成一个函数。我应该在视图中声明一个函数/方法来检索元组吗?@MirkoOricci你能发布你的视图代码吗?你的页面上有js处理吗?是的,我现在正在做:

   if request.method == 'POST':
        form = AssignWorkToPerson(request.POST)
        # skipped
        form.fields['person'].choices = person_choices  
        if form.is_valid():
            pass