2016-06-30 6 views
1

Je suis nouveau sur Django et toute aide est appréciée, Comment puis-je restreindre l'option de choix dans un champ basé sur un champ précédent. Par exemple, si je choisis 'chien' pour animal, je veux enlever 'chocolat' du FOOD_CHOICE, parce que j'aime les chiens. Merci!!!Dans Django, supprimer des options dans un champ de choix basé sur d'autres champs dans un modèle

ANIMAL_CHOICE = (
    ('a','cat'), 
    ('b','dog'), 
    ('c','fish'), 
) 
FOOD_CHOICE = (
     ('a', 'chocolate'), 
     ('b', 'kittySnack'), 
     ('c', 'steak'), 
) 


class Animal(models.Model): 
    animal = models.CharField(max_length=1, choices= ANIMAL_CHOICE) 
    food = models.CharField(max_length=1, choices= FOOD_CHOICE) 

Répondre

0

vous faire des formes django, lorsque vous êtes nettoyage de la forme, ou vous pouvez également manipuler via javascript pour supprimer cette option de frontend

+0

Mon plan est de n'effectuer la vérification sous forme de django. –

0

Vous ne pouvez pas le faire, sauf si vous écrivez un ensemble de règles, ce qui est vraiment compliqué à maintenir.
La meilleure solution ici est d'utiliser un modèle distinct pour la nourriture, et ajouter la clé étrangère au modèle animal:

ANIMAL_CHOICE = (
    ('a','cat'), 
    ('b','dog'), 
    ('c','fish'), 
) 
FOOD_CHOICE = (
     ('a', 'chocolate'), 
     ('b', 'kittySnack'), 
     ('c', 'steak'), 
) 


class Animal(models.Model): 
    animal = models.CharField(max_length=1, choices= ANIMAL_CHOICE) 
    foods = models.ManyToManyField(Food) 

class Food(models.Model): 
    food = models.CharField(max_length=1, choices= FOOD_CHOICE) 

D'autre part, vous devez garantir que chaque entrée des animaux sont uniques, les mêmes pour chaque dossier de nourriture. Cela évitera les doublons.
Maintenant, en utilisant des choix ici, limite la solution et la rend codée en dur, ceci exigera de changer votre code si vous voulez inclure un nouvel animal ou un nouvel aliment.

Suggestion

class Animal(models.Model): 
     name = models.CharField(max_length=50, unique=True) 
     description = models.TextField() 
     foods = models.ManyToManyField(Food) 

class Food(models.Model): 
     name = models.CharField(max_length=50, unique=True) 
     description = models.TextField()