我正在尝试设置多选选项。
type = models.CharField(max_length=20, choices=TYPE_CHOICES)
上面是我目前正在做的事情,但它只让我选择选择“TYPE_CHOICES”中的一项。我希望能够在“TYPE_CHOCIES”中选择多个项目。
我可以通过使用 ManyToMany 关系并使 Choices 成为模型来做到这一点,但我更喜欢保持简单。
我尝试过搜索,但没有找到任何内容,或者这是否可能?
最佳答案
您在设计中遇到了所谓的“数据库规范化”。
退后一步,考虑一下如果您可以选择“红色”和“蓝色”作为项目的有效颜色,数据会是什么样子......
数据库单元格需要是“红色,蓝色”或类似的“红色|蓝色”,无论您选择什么分隔符。但是,您将如何查询所有颜色为“蓝色”的东西呢?不能,因为 select * from table where color = 'blue'
不起作用。这就是为什么 @Willem Van Onsem 回复您说您需要一个外部表。当您需要多种选择时,这是典型的解决方案,您可以在 Django 文档中看到它,他们在其中讨论了披萨的配料。
class Topping(models.Model):
name = models.CharField(max_length=30)
class Pizza(models.Model):
name = models.CharField(max_length=50)
toppings = models.ManyToManyField(Topping)
def __str__(self):
return "%s (%s)" % (
self.name,
", ".join(topping.name for topping in self.toppings.all()),
)
您将无法在此处使用choices
解决方案。这不太合适。您可以使用“配料”或“颜色”表中的文本填写表单选项。
关于Django ManyToMany 与选项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61940860/