Django Admin: demande Obtenir dans le constructeur de ModelForm
-
21-09-2019 - |
Question
Le code ci-dessous supprime certaines valeurs d'un menu déroulant. Il fonctionne très bien, mais je veux supprimer la valeur si l'utilisateur ne dispose pas certaines autorisations. Comment puis-je accéder à request.user dans le constructeur de la ModelForm? Ou est-il une meilleure façon d'accomplir ce que je suis en train de faire?
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)
La solution 2
Ok voici comment je l'ai résolu:
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)
Autres conseils
Comment puis-je accéder à request.user dans le constructeur du ModelForm?
Pour l'utiliser dans le constructeur de formulaire, juste passer la demande à elle.
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
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow