Django - 如何排除表单字段视图?
Posted
技术标签:
【中文标题】Django - 如何排除表单字段视图?【英文标题】:Django - how to exclude a form field view? 【发布时间】:2015-11-03 03:14:24 【问题描述】:如果用户具有特定属性,我无法排除字段。
我尝试使用this tip 之后的is_staff
选项进行测试,但我无法使其工作。我得到错误:__init__() got an unexpected keyword argument 'user'
如果用户是员工,谁能告诉我如何排除某些字段?
这是我在 forms.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']
这是我的观点
def new(request):
if not request.user.is_authenticated():
return redirect('auth_login')
title = "Nueva Orden de trabajo"
store = request.user.userprofile.fk_store
form = NewOrderForm(request.POST or None)
context = "title": title,
"form": form
if 'dni_cuit' in request.session:
dni_cuit = request.session.get('dni_cuit')
if Client.objects.get(dni_cuit=dni_cuit):
dni_cuit = request.session.pop('dni_cuit')
client = Client.objects.get(dni_cuit=dni_cuit)
context.update('client': client)
request.session['dni_cuit'] = dni_cuit
else:
return redirect('new_client')
# Si el formulario es valido guardamos el contenido
if form.is_valid():
...
...
...
非常感谢谁能帮助我。
对不起,我的英语不好!
【问题讨论】:
【参考方案1】:您在正确的轨道上,但您的声明 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']
【讨论】:
【参考方案2】:不确定这是否有帮助,但 user = kwargs.pop('user')
应该是 user = kwargs.pop('user', None)
吗?您是否还尝试将user=request.user
作为NewOrderForm
中的参数传递?
【讨论】:
以上是关于Django - 如何排除表单字段视图?的主要内容,如果未能解决你的问题,请参考以下文章