У меня проблема с исключением поля, если у пользователя есть определенный атрибут.
Я пытаюсь выполнить тест, используя параметр 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():
...
...
...
Большое спасибо, кто может мне помочь.
Извините за мой плохой английский!
2 ответа
Вы на правильном пути, но ваше утверждение 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']
Не уверен, что это поможет, но должно ли user = kwargs.pop('user')
быть user = kwargs.pop('user', None)
? Также вы пытались передать user=request.user
в качестве параметра в NewOrderForm
?
Похожие вопросы
Связанные вопросы
Новые вопросы
python
Python — это мультипарадигмальный многоцелевой язык программирования с динамической типизацией. Он предназначен для быстрого изучения, понимания и использования, а также обеспечивает чистый и унифицированный синтаксис. Обратите внимание, что Python 2 официально не поддерживается с 01.01.2020. Если у вас есть вопросы о версии Python, добавьте тег [python-2.7] или [python-3.x]. При использовании варианта Python (например, Jython, PyPy) или библиотеки (например, Pandas, NumPy) укажите это в тегах.