0

J'utilise django-xadmin pour un de mes projets qui est basé sur django-admin. J'ai besoin d'aide dans un cas. Supposons, j'ai deux modèles comme celui-ci -Filtrer les options du champ select dans django-admin

class Foo(models.Model): 
    CHOICES = (
     ('a', 'Option A'), 
     ('b', 'Option B') 
    ) 
    status = models.CharField(max_length=10, choices=CHOICES) 

class Bar(models.Model): 
    foo = models.ForeignKey(Foo) 
    remarks = models.CharField(max_length=200) 

En xadmin, lorsque je tente d'ajouter Bar via le formulaire par défaut fourni par xadmin, dans le champ Select Foo, tous Foos (à la fois avec l'option A et Option B) deviennent disponibles pour sélectionner. Je veux filtrer les options et fournir seulement, par exemple, Foos de Option A.

Comment puis-je faire cela? Y at-il une méthode dans xadmin, je devrais appeler ou personnaliser pour y parvenir?

Répondre

1

Jetez un oeil à limit_choices_to

EDIT

Considérons cet exemple de la doc:

staff_member = models.ForeignKey(
    User, 
    on_delete=models.CASCADE, 
    limit_choices_to={'is_staff': True}, 
) 

provoque le champ correspondant sur la ModelForm à la liste que les utilisateurs qui ont is_staff = Vrai. Cela peut être utile dans l'admin Django.

Par conséquent, c'est un moyen facile d'ajouter des restrictions sur les champs correspondants.

+0

Merci. Laissez-moi essayer. Mais vous devriez ajouter quelques explications avec votre réponse, pas seulement un lien. – ni8mr

+0

Je peux si vous en avez besoin, mais je ne voulais pas être répétitif. Le document, dans ce cas, est vraiment clair. Dites-moi comment ça se passe. – scharette

+0

Mon problème est résolu. Mais vous pouvez ajouter une description, même si elle est claire dans le document. C'est bon pour tout le monde. – ni8mr

1

limit_choices_to avec plusieurs conditions:

staff_member = models.ForeignKey(
User, 
on_delete=models.CASCADE, 
limit_choices_to={'is_staff': True,is_superuser':False},) 

nous pouvons ajouter plusieurs choix limites option dans le modèle ..

+0

J'ai déjà appliqué plusieurs conditions après avoir lu des documents. Mais encore une fois, merci. – ni8mr