postgresql django:如何存储变量类型的实例数组?

时间:2015-11-05 16:49:54

标签: django postgresql

假设您正在创建博客,并且每个博客帖子都包含一系列交错文本片段和svg片段(例如)。

您可以将每个片段存储在自定义django字段中(例如HTMLFieldSVGField)。

组织这个的最佳方法是什么?

如何维护片段的顺序?这个解决方案看起来很难看:

class Post(models.Model):
    title = CharField(1000)

class Fragment(models.Model):
    index = IntegerField()
    html = HTMLField()
    svg = SVGField()
    post = ForeignKey(Post)

1 个答案:

答案 0 :(得分:1)

如上所述,单独的模型是记录所有片段的可行方法。我们使用一个IntegerField来记录片段顺序,以便稍后可以恢复整个Post

这里有一些警告:

  1. 使用order_bylatest或切片骰子操作来排序/查找元素。
  2. 当需要插入/删除操作时,它将打破整个序列。我们需要增加/减少多个元素以维持订单。使用queryset和F()表达式一次更改多个记录,如另一个SO帖子here中所述。
  3. 这种方法存在一些不完善之处,但这是迄今为止我能提出的最佳解决方案(之前我遇到过类似情况)。链接列表是一种很好的方法,但它不是数据库友好的,因为我们需要O(n)操作而不是带有queryset的O(1)来获取所有片段。