如何存储动态可变数量的对象(在python中)的顺序?

时间:2016-08-02 15:00:02

标签: python django postgresql data-structures django-models

我想说我想问一个User一个Question"订购以下动物从大到小" 。这是一个简化的django:

class Question(models.Model):
    text = models.CharField()         #eg "Order the following animals..."

class Image(models.Model):
    image = models.ImageField()       #pictures of animals
    fk_question = models.ForeignKey(Question)

现在,我可以为每个Image分配一个可变数量的Question s,并自定义问题文本。耶。

记录回复的适当方式是什么?显然,我需要UserQuestion的外键:

class Response(models.Model):
    fk_user = models.ForeignKey(User)
    fk_question = models.ForeignKey(Question)

但现在我被卡住了。如何优雅地记录此Image指定的User个对象的顺序?

编辑:我使用的是Postgres 9.5

1 个答案:

答案 0 :(得分:1)

我一般强烈反对在列中存储逗号分隔数据。然而,这似乎是规则的例外!我可以提议CommaSeparatedIntegerField吗?

  

class CommaSeparatedIntegerField(max_length = None,** options)[source]¶
  由逗号分隔的整数字段。就像在CharField中一样   需要max_length参数和关于数据库的注释   提到的便携性应该注意。

这实际上是一个字段,因此您输入的顺序将保留在db中。

您尚未提及您的数据库。如果你有幸使用Postgresql并使用django 1.9,你也可以使用ArrayField。

使用arrayfield会好得多,因为在字符串和列表之间来回转换不会存在。逗号分隔字段的情况是搜索很难,你不能轻易拉出第N个元素。 POstgresql数组删除后者的难度。