首页 > 解决方案 > Django 使用 kwargs 将值从视图传递到非模型表单

问题描述

当我在我的视图中调用我的表单时,我试图将 OTHER_VALUE 作为参数传递给表单。

我这样做是因为我想从我的观点和表单中得到我的验证。

视图.py

OTHER_VALUE = "the query that i run to get silly conditions"
if request.method=='POST':
  form = MY_FORM(request.POST, OTHER_VALUE)

表格.py

class MY_FORM(forms.Form):

  real_value = forms.CharField()
  def clean_real_value(self):
    if OTHER_VALUE ...

这预计会引发错误

__init__() got an unexpected keyword argument 'OTHER_VALUE'

=========

我尝试使用以下几种不同的变体设置初始化__init__

class MY_FORM(forms.Form):
  real_value = forms.CharField()

  def __init__(self, *args, **kwargs): 
    OTHER_VALUE = kwargs.pop('OTHER_VALUE') 
    super(MY_FORM, self).__init__(*args, **kwargs)
    self.fields['OTHER_VALUE'].initial = OTHER_VALUE

但我不断收到这种类型的错误

Exception Value: 'employee'
Exception Location: /Users/macbook/Desktop/OrgDB/orgchart/forms.py in __init__, line 42

标签: djangodjango-formsdjango-viewsinitialization

解决方案


一种方法是将隐藏输入作为字段添加到表单中

class MY_FORM(forms.Form):
    real_value = forms.CharField()
    other_value = forms.CharField(max_length=255,required=False,
                    widget=forms.HiddenInput())

这个新字段可以在您的表单中提供,但最重要的是确保在检查表单验证之前添加该值。

OTHER_VALUE = "other_value"
if request.method=='POST':
    data = request.POST.copy()
    data['other_value'] = OTHER_VALUE
    form = MY_FORM(data)
    if form.is_valid():
         pass

在您的表单中,您可以访问该值:

....# codes
    real_value = forms.CharField()
    other_value = forms.CharField(max_length=255,required=False,
                    widget=forms.HiddenInput())

    def clean_real_value(self):
        cleaned_data = super(FormName,self).clean_real_value()
        OTHER_VALUE = cleaned_data.get("other_value")
        if OTHER_VALUE ...

推荐阅读