2015-08-11 2 views
2

У меня проблема с исключением поля, если у пользователя есть определенный атрибут.Django - как исключить вид поля формы?

Я пытаюсь сделать тест, используя is_staff вариант this tip, но я не могу заставить его работать. Я получаю ошибку: __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(): 
... 
... 
... 

Большое спасибо, кто может мне помочь.

Извините за мой плохой английский!

ответ

0

Не уверен, что это поможет, но должно быть user = kwargs.pop('user') be user = kwargs.pop('user', None)? Также вы пробовали передать user=request.user в качестве параметра в NewOrderForm?

+0

Спасибо за ваш ответ, но все же не работает! – marcosgue

3

Вы на правильном пути, но ваше заявление 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'] 
+0

собираюсь попробовать сейчас и рассказал вам, что случилось !!! Благодаря! – marcosgue

Смежные вопросы