【问题标题】:It's possible to use django mysql model array field可以使用 django mysql 模型数组字段
【发布时间】: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 )

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

【问题讨论】:

  • 请不要在变量名中使用空格。

标签: mysql django django-models django-rest-framework django-admin


【解决方案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
猜你喜欢
  • 1970-01-01
  • 2013-04-09
  • 2020-09-09
  • 2020-03-09
  • 2021-07-20
  • 2021-08-24
  • 1970-01-01
  • 2010-12-19
  • 2018-10-21
相关资源
最近更新 更多