Django如何排除窗体字段视图?

2024-10-03 23:27:05 发布

您现在位置:Python中文网/ 问答频道 /正文

如果用户有特定的属性,我有一个排除字段的问题。在

我试图使用is_staff选项在this tip后面进行测试,但我无法使其工作。我得到错误:__init__() got an unexpected keyword argument 'user'

如果用户是职员,有谁能告诉我如何排除一些字段?在

这是我的表格表单.py在

class NewOrderForm(forms.ModelForm):

    class Meta:
        model = WorkOrder
        fields = ['store_internal_order',
                  'sector',
                  'article',
                  'serial',
                  'work',
                  'article_details',
                  'cash_advance',
                  'initial_price'
                  ]

    def __init__(self, *args, **kwargs):
        super(NewOrderForm, self).__init__(*args, **kwargs)
        user = kwargs.pop('user')
        if user.is_staff:
           del self.fields['store_internal_order']

这是我的观点

^{pr2}$

非常感谢能帮助我的人。在

对不起,我的英语不好!在


Tags: store用户selffieldsinitisarticleargs
2条回答

不确定这是否有帮助,但是user = kwargs.pop('user')应该是user = kwargs.pop('user', None)?您也尝试过将user=request.user作为NewOrderForm中的参数传递吗?在

您的思路是正确的,但您的语句user = kwargs.pop('user')的位置不正确。它应该在super(NewOrderForm, self).__init__(*args, **kwargs)之前调用。发生此错误的原因是,在基窗体类中,__init__()方法不希望接受您的user参数。因此,我们需要首先弹出它并将其存储在一个变量中,然后调用super。在

修正后:

class NewOrderForm(forms.ModelForm):

    class Meta:
        model = WorkOrder
        fields = ['store_internal_order',
                  'sector',
                  'article',
                  'serial',
                  'work',
                  'article_details',
                  'cash_advance',
                  'initial_price'
                  ]

    def __init__(self, *args, **kwargs):
        # user should be popped here
        user = kwargs.pop('user', None)
        super(NewOrderForm, self).__init__(*args, **kwargs)
        # just in case your user is empty
        if user and user.is_staff:
           del self.fields['store_internal_order']

相关问题 更多 >