2016-06-30 5 views
1

Я новичок в Django, и любая помощь приветствуется, как я могу ограничить выбор в одном поле на основе предыдущего поля. Например, если я выбираю «собаку» для животных, я хочу удалить шоколад из FOOD_CHOICE, потому что я люблю собак. Благодаря!!!В 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) 
    food = models.CharField(max_length=1, choices= FOOD_CHOICE) 

ответ

0

вы будете делать, что от Джанго форм, когда вы находитесь очистки формы, или вы можете также манипулируют с помощью JavaScript, чтобы удалить эту опцию из интерфейса

+0

Мой план действительно выполнить проверку в форме Джанго. –

0

Вы не можете это сделать, если вы пишете набор правила, которые действительно сложно поддерживать.
Лучшее решение здесь использовать отдельную модель для производства продуктов питания, а также добавить внешний ключ к животной модели:

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