Comment filtrer les choix de clés étrangères dans Django ModelForms ?

Mary-Kate Olsen
Libérer: 2024-11-16 10:38:03
original
209 Les gens l'ont consulté

How to Filter ForeignKey Choices in Django ModelForms?

Django ModelForm Filtrage des choix de clés étrangères

Introduction

Lors de la création de formulaires dans Django, il peut Il serait souhaitable de limiter les choix présentés aux utilisateurs pour un domaine spécifique en fonction de certains critères. Cela peut être particulièrement utile dans les scénarios impliquant des données hiérarchiques, comme lors de la sélection d'une clé étrangère.

Étude de cas : Sélection de choix de clé étrangère dans un ModelForm

Considérons un cas hypothétique Projet Django avec les modèles suivants :

class Company(models.Model):
    name = ...

class Rate(models.Model):
    company = models.ForeignKey(Company)
    name = ...

class Client(models.Model):
    name = ...
    company = models.ForeignKey(Company)
    base_rate = models.ForeignKey(Rate)
Copier après la connexion

Dans ce cas, chaque entreprise a plusieurs tarifs et clients. Chaque client doit avoir un tarif de base choisi parmi les tarifs de sa société mère, et non parmi les tarifs d'une autre entreprise.

Limiter les choix de clés étrangères à l'aide du filtrage QuerySet

Pour limiter les choix pour le tarif du formulaire Client aux seuls tarifs associés à l'entreprise sélectionnée, nous pouvons modifier notre classe ClientForm comme suit :

class ClientForm(ModelForm):
    class Meta:
        model = Client
        fields = ['name', 'base_rate']

    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        self.fields['base_rate'].queryset = Rate.objects.filter(company_id=self.instance.company_id)
Copier après la connexion

Dans ce code, nous récupérons l'ID de l'entreprise de l'instance associée au formulaire. Cela garantit que les choix de tarifs sont filtrés en fonction de la bonne entreprise.

Notes supplémentaires

  • Cette approche est compatible avec Django 1.0 et versions ultérieures.
  • L'argument limit_choices_to de ForeignKeyField est conçu pour être utilisé dans l'interface d'administration de Django et peut ne pas toujours être adapté à une utilisation dans les formulaires.
  • Pour des scénarios de filtrage plus complexes, il peut être nécessaire de remplacer la méthode get_queryset de la classe ModelChoiceField.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal