2016-06-30 3 views
1

私はDjangoを初めて使いました。どんな助けがありますか?前のフィールドに基づいて1つのフィールドで選択肢オプションを制限する方法を教えてください。たとえば、私が動物のために「犬」を選択した場合、私は犬を愛しているので、FOOD_CHOICEから「チョコレート」を削除したいと思います。ありがとう!!!Djangoでは、モデルの他のフィールドに基づいてchoice-fieldのオプションを削除します

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) 

答えて

0

あなたはyoureのフォームを清掃、またはあなたはまた、あなたがのセットを書き込みしない限り、あなたはこれを行うことはできませんフロントエンド

+0

私の計画は、Djangoのフォームでチェックを実行しないです。 –

0

からそのオプションを削除するにはJavaScriptを経由して操作することができたときに、Djangoのフォームからそれを行いますルールは維持するのが本当に複雑です。
ここに最善の解決策は、食品のための別のモデルを使用して、動物モデルへの外部キーを追加します:

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) 

一方、あなたは、各動物のエントリは、それぞれに同じ一意であることを保証すべきです食糧記録。これは重複を避けるでしょう。
ここでの選択肢を使用して解決策を制限し、それをハードコード化します。新しい動物や新しい食物を入れたい場合は、コードを変更する必要があります。

提案

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() 
関連する問題