2009-10-15 2 views
1

В приведенном ниже коде удаляются определенные значения из выпадающего меню. Он отлично работает, но я хочу удалить значение, если пользователю не хватает определенных разрешений. Как я могу получить доступ к request.user в конструкторе ModelForm? Или есть лучший способ добиться того, что я пытаюсь сделать?Django Admin: Получение запроса в конструкторе ModelForm

class AnnouncementModelForm(forms.ModelForm): 

    def __init__(self, *args, **kwargs): 
     super(AnnouncementModelForm, self).__init__(*args, **kwargs) 
     self.fields["category"].queryset = AnnouncementCategory.objects.filter(can_post=True) 

ответ

1

Ok вот как я ее решил:

def formfield_for_foreignkey(self, db_field, request, **kwargs): 
    if db_field.name == "category" and not request.user.has_perm('can_post_to_all'): 
     kwargs["queryset"] = AnnouncementCategory.objects.filter(can_post=True) 
     return db_field.formfield(**kwargs) 
    return super(AnnouncementAdmin, self).formfield_for_foreignkey(db_field, request, **kwargs) 
1

How can I access request.user in the ModelForm's constructor?

Чтобы использовать его в виде конструктора, просто передать запрос к нему.

class AnnouncementModelForm(forms.ModelForm): 

    def __init__(self, request, *args, **kwargs): 
     super(AnnouncementModelForm, self).__init__(*args, **kwargs) 
     qs = request.user.foreignkeytable__set.all() 
     self.fields["category"].queryset = qs 
+1

Спасибо за ваш ответ. Вы уверены в этом? Потому что я получаю этот TypeError: __init __() принимает не менее 2 аргументов без ключевого слова (1 данный) – orwellian

+0

Передайте аргумент «запрос» в создание класса! Как еще это получается? AnnouncementModelForm (запрос) –

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