Django ManyToMany 与选项

标签 django django-models

我正在尝试设置多选选项。

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/

相关文章:

python - Django字典更新序列元素#0的长度为0;需要 2 个

python - Redis channels -- 抓取key时的WRONGTYPE操作

python - Django 1.10 中未定义“views”

Django,模型的 "default"参数的随机化

mysql - 我如何告诉 Django 从 WAMP 安装中使用 MySql?

python - Django:ModelMultipleChoiceField 不选择初始选择

python - 在 Django 中缓存来自其他网站的数据

django - 这个QueryDict实例是不可变的

django - 将 Django 连接到 Web 服务而不是数据库

Django-注册限制为特定域电子邮件地址