2013-09-23 2 views
1

Я пытаюсь обновить поле выбора в зависимости от прав пользователя. У меня есть логическое поле, которое, если False (по умолчанию), получает стандартный пользователь. В противном случае, если у пользователя есть разрешение, я хочу отобразить все.Заполните поле Django Choice из базы данных на основе user.has_perms

views.py

class ExportFormView(FormView): 

    template_name = 'export.html' 
    form_class = ExportForm 
    success_url = '/' 

    def get_form_kwargs(self): 
     kwargs = super(ExportFormView, self).get_form_kwargs() 
     kwargs.update({ 
      'request' : self.request 
     }) 
     return kwargs 

forms.py

class ExportForm(forms.Form): 
    def __init__(self, request, *args, **kwargs): 
     self.request = request 
     super(ExportForm, self).__init__(*args, **kwargs) 

    choice_list = [] 

    if request.user.has_perms('tracker.print_all'): 
     e = Muid.objects.values('batch_number').distinct() 
    else: 
     e = Muid.objects.values('batch_number').distinct().filter(printed=False) 
    for item in e: 
     choice = item['batch_number'] 
     choice_list.append((choice, choice)) 

    batch_number = forms.ChoiceField(choices = choice_list) 

Я получаю ошибку:

NameError at/
name 'request' is not defined 

Любая помощь будет принята с благодарностью, я был застрял на этом, пока e (И попробовал много советов по поиску и ответам).

ответ

1

Обнаружено, как это сделать, все еще интересуется другими способами.

Используя pdb, я обнаружил, что представление настроено правильно. Но мне пришлось изменить форму. Я не мог получить доступ к переменной из-за пределов функции, такой как __init__, другие функции также должны иметь доступ к переменной, но мне нужно было создать форму в init, поэтому я не мог дождаться вызовов функций.

Код:

Views.py

class ExportFormView(FormView): 

template_name = 'export_muids.html' 
form_class = ExportForm 
success_url = '/' 

def get_form_kwargs(self): 
    kwargs = super(ExportFormView, self).get_form_kwargs() 
    kwargs.update({ 
     'request' : self.request 
    }) 
    return kwargs 

forms.py

class ExportForm(forms.Form): 
    def __init__(self, request, *args, **kwargs): 
     self.request = request 
     choice_list = [] 

     if request.user.has_perms('tracker.print_all'): 
      e = Muid.objects.values('batch_number').distinct() 
     else: 
      e = Muid.objects.values('batch_number').distinct().filter(exported=False) 
     for item in e: 
      choice = item['batch_number'] 
      choice_list.append((choice, choice)) 
     super(ExportForm, self).__init__(*args, **kwargs) 
     self.fields['batch_number'] = forms.ChoiceField(choices = choice_list) 
+0

Другая ссылка [http://ilian.ini.org/django-forms- choicefield-с-динамических значений /] (http://ilian.ini.org/django-forms-choicefield-with-dynamic-values/). – santiagopim

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