在Django中,根据模型中的其他字段删除选项字段中的选项

时间:2016-06-30 18:36:51

标签: python django dynamic django-models choicefield

我是Django的新手,感谢任何帮助,如何根据前一个字段限制一个字段中的选项。例如,如果我为动物选择'狗',我想从FOOD_CHOICE中删除'巧克力',因为我爱狗。谢谢!!!

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)

2 个答案:

答案 0 :(得分:0)

你将从django表单中删除表单,或者你也可以通过javascript操作从前端删除该选项

答案 1 :(得分: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()