Django:如何将参数传递给表单

标签 django django-forms

我有一个使用 bootstrap3 呈现的 Django 表单。我希望能够将参数传递到我的表单中以使其更加通用。我的表单如下所示:

class SpacecraftID(forms.Form):
  def __init__(self,*args,**kwargs):
    choices = kwargs.pop('choices')
    #self.choices = kwargs.pop('choices') produces same error
    super(SpacecraftID,self).__init__(*args,**kwargs)

  scID = forms.MultipleChoiceField(required=False, widget=forms.CheckboxSelectMultiple, choices=choices)

我的观点如下:

def schedule_search(request):
 choices = (
    ('1','SAT1'),
    ('2','SAT2'),
    ('3','SAT3'),
    )

 if request.method == 'POST':
    form_ID = SpacecraftID(request.POST,choices=choices)
    if form.is_valid():
        scID = form_ID.cleaned_data['scID']

 else:
    form_ID = SpacecraftID(choices=choices)

 return render(request, 'InterfaceApp/schedule_search.html', {'form3': form_ID})

当我运行此代码时,出现错误:

名称错误位于/InterfaceApp/schedule_search/, 名称“选择”未定义

最佳答案

问题在于,当您定义表单字段时,choices变量不可用,即当Python解析forms.py文件时,它仅在以下情况下可用:表单在 __init__ 内实例化。然后,您需要更新 __init__ 内的字段。

class SpacecraftID(forms.Form):
    def __init__(self,*args,**kwargs):
        choices = kwargs.pop('choices')

        super(SpacecraftID,self).__init__(*args,**kwargs)

        # Set choices from argument.
        self.fields['scId'].choices = choices

    # Set choices to an empty list as it is a required argument.
    scID = forms.MultipleChoiceField(required=False, widget=forms.CheckboxSelectMultiple, choices=[])

关于Django:如何将参数传递给表单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29974105/

相关文章:

Django 将查询结果附加到查询集

python - Celery - 内存泄漏(即使工作人员完成任务后内存也不会释放)

django - 如何在 PYTHONPATH 中包含 Django 应用程序?

python - 使用 Django Rest Framework 序列化器创建外键关系的方法

python - 如何使用 django rest api 上传多个文件?

python - Django 如何修改 MultipleChoiceField 的复选框标签?

python - HTML 不在 Django 文本字段中呈现

python - Django个人资料图片上传表单将图片保存在两个文件夹中

python - Django:检查模型字段是否得到回答

python - ModelForm 和 ModelSelect2Widget (django-select2)