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)
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)
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
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!