【问题标题】:Storing arrays in Django Models (not PostGreSQL)在 Django 模型中存储数组(不是 PostGreSQL)
【发布时间】:2020-11-25 00:47:19
【问题描述】:

我想在我的 Django 模型中使用一个字段来存储数组数据。

例如,考虑一个存储学生数据的模型。我想要一个数组字段,将该学生的分数存储为整数数组。我能做什么?

使用 PostGreSQL,所以我不能使用 ArrayField。

class Student(models.Model):
    ...
    ...
    marks = models.?

【问题讨论】:

  • 通常你不会。即使对于 PostgreSQL 也不是最好的方法。通常你制作一个模型Mark,用ForeignKeyStudent

标签: arrays python-3.x django web django-models


【解决方案1】:

通常你不会。即使对于 PostgreSQL 也不可取。关系数据库通常更适合使用列中的标量值。

您可以制作一个模型Mark,将ForeignKey [Django-doc] 改为Student,例如:

class Student(models.Model):
    # …

class Mark(models.Model):
    mark = models.IntegerField()
    student = models.ForeignKey(
        Student,
        related_name='marks'
        on_delete=models.CASCADE
    )

然后您可以为学生创建例如分数:

student = Student.objects.create()
Mark.objects.create(student=stud, mark=7)
Mark.objects.create(student=stud, mark=8)

然后您访问studentMark 对象:

student.marks.all()

【讨论】:

  • 另外,我们也可以使用jsonfield python 库。我们可以做到以下几点,from jsonfield import JSONField class Student(models.Model): ... ... data = JSONField(default = list) 更多可以在 (pypi.org/project/jsonfield) 找到
  • @Adhishwar:我建议不要这样做。一个 JsonField 在窗帘后面只是一个 CharField 在字符串/数据之间透明包装。结果,数据库不知道它存储了什么。因此,您不能按平均成绩订购Students,例如使用数据库查询。
猜你喜欢
  • 2019-12-24
  • 2011-05-16
  • 2016-02-06
  • 1970-01-01
  • 2020-03-09
  • 2019-08-09
  • 1970-01-01
  • 1970-01-01
  • 2016-07-15
相关资源
最近更新 更多