可以使用 django mysql 模型数组字段

Posted

技术标签:

【中文标题】可以使用 django mysql 模型数组字段【英文标题】:It's possible to use django mysql model array field 【发布时间】:2020-02-20 11:23:54 【问题描述】:

在我的情况下,我需要在预期的字段数组中设计我的模型。

field 1: string, field 2: [""], field 3: [""] 

到目前为止,我设计的模型如下:

class Collaborator(models.Model):
    name = models.CharField(max_length=50, blank=True, null = True, )

class Responsibility(models.Model):
    name = models.CharField(max_length=50, blank=True, null = True, )


class Class1(models.Model):
    field 1 = models.CharField(max_length=50, blank=True, null = True, )
    field 2 = models.ManyToManyField(Responsibility, related_name='res_cards', blank=True,null=True )
    field 3 = models.ManyToManyField(Collaborator, related_name='col_cards', blank=True, null=True )

所以我期望获取数组中的所有字段而不是定义新模型

【问题讨论】:

请不要在变量名中使用空格。 【参考方案1】:

如果您使用 SQLite 作为数据库,则ManyToManyField 没有其他选择。

但是,如果您使用(或切换到)PostgreSQL 作为数据库,则可以使用ArrayField

你可以这样使用它:

field_1 = ArrayField(
            models.CharField(max_length=50, blank=True)
          )

附:我假设你不会真的将你的字段命名为 field 1 等,但如果你这样做,不要使用空格,而是使用下划线,所以 field_1 等。

有很多关于如何使用 Postgres 代替 SQLite 的信息,例如 this link 将是一个好的开始。

但是,在大多数情况下,我仍然建议使用 ManyToManyField,因为它可以让您轻松查询两个对象之间的共享关系,并防止重复数据。

【讨论】:

我使用 mysql 作为我的数据库 这种情况下可以使用django-my-sql, which supports a ListField 我已经尝试过在我的管理用户界面中没有看到任何变化,它显示为文本字段 当我查看文档时,您似乎需要在该文本字段中输入您的值,用逗号分隔:name1,name2,name3

以上是关于可以使用 django mysql 模型数组字段的主要内容,如果未能解决你的问题,请参考以下文章

如何更新 MySQL 数据库中的 Django 模型字段

python django查询mysql表字段的最大值

两个外键字段,正好一个被设置为一个值,另一个在 MySQL 数据库的 django 模型中为空

Django 数据库添加字段

Django 数组字段“项目”不可下标

Django 使用数组字段在 makemigrations 上引发应用程序未加载错误