Django / Python - 检查参数是否传递给了class

时间:2018-05-21 11:34:43

标签: python django django-forms

我将不同的参数传递给Django表单,并希望检查在表单的类中传递了哪个参数。我怎么能这样做?

  

views.py

...
form = CategoryForm(choose_category =True)
...
  

forms.py

class CategoryForm(forms.Form):

    def __init__(self, *args, **kwargs):

        self.choose_category = kwargs.pop('choose_category',None)
        super(CategoryForm,self).__init__(*args, **kwargs)
        self.helper = FormHelper()
        self.helper.form_method = 'POST'

        if not self.choose_category:
            self.helper.add_input(Submit('submit', 'Submit', css_class='btn-success'))

    if self.choose_category:
        do something

在上面的示例中,错误是name 'self' is not defined,如何检查choose_category之外是否存在__init__

这是python的问题,我如何检查哪些参数已从类内部传递给类,但在__init__构造函数之外。如果我理解我正在制造的逻辑断裂,那么答案就是 - 你不能,这是愚蠢的 - 是受欢迎的。)

谢谢!

  

编辑:表格。吡啶

无法理解为什么这不起作用且字段不显示:

class CategoryForm(forms.Form)

    def __init__(self, *args, **kwargs):

        self.choose_category = kwargs.pop('choose_category',None)
        super(CategoryForm,self).__init__(*args, **kwargs)
        self.helper = FormHelper()
        self.helper.form_method = 'POST'

        if not self.choose_category:

            self.helper.add_input(Submit('submit', 'Submit', css_class='btn-success'))
            self.onchange(False)
        else:
            self.onchange(True)

    def onchange (self, val):

        if val:
            category = forms.ModelChoiceField(
                queryset =Categories.objects.all(),
                widget = forms.Select(attrs = {'onchange':'form.submit();'}) ,
                empty_label= None,
                required=True
                )
            print('why doesnt it work this way')
        else:
            category = forms.ModelChoiceField(queryset =Categories.objects.all() ,empty_label= None,required=True)

1 个答案:

答案 0 :(得分:2)

这种事情必须在__init__内完成。从那里,您可以通过self.fields词典添加或修改字段定义。

if choose_category:
    self.fields['cat'] = forms.ModelChoiceField(queryset=....)