假设您正在创建博客,并且每个博客帖子都包含一系列交错文本片段和svg片段(例如)。
您可以将每个片段存储在自定义django字段中(例如HTMLField
和SVGField
)。
组织这个的最佳方法是什么?
如何维护片段的顺序?这个解决方案看起来很难看:
class Post(models.Model):
title = CharField(1000)
class Fragment(models.Model):
index = IntegerField()
html = HTMLField()
svg = SVGField()
post = ForeignKey(Post)
答案 0 :(得分:1)
如上所述,单独的模型是记录所有片段的可行方法。我们使用一个IntegerField
来记录片段顺序,以便稍后可以恢复整个Post
。
这里有一些警告:
order_by
,latest
或切片骰子操作来排序/查找元素。F()
表达式一次更改多个记录,如另一个SO帖子here中所述。这种方法存在一些不完善之处,但这是迄今为止我能提出的最佳解决方案(之前我遇到过类似情况)。链接列表是一种很好的方法,但它不是数据库友好的,因为我们需要O(n)操作而不是带有queryset的O(1)来获取所有片段。