[英]In Django, remove options in a choice-field dropdown based on the value selected in other field in a model
[英]In Django, remove options in a choice-field based on other fields in a model
我是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)
当你清理表单时,你会从django表单中做到这一点,或者你也可以通过javascript操作从前端删除该选项
除非您编写一组规则,否则您无法执行此操作,这些规则实际上很难维护。
这里最好的解决方案是使用单独的食物模型,并将外键添加到动物模型中:
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()
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.