[英]How do you order lists in the same way QuerySets are ordered in Django?
[英]Ordered lists in django
我有一个非常简单的问题。 我需要创建表示有序列表元素的模型。 这个模型可以像这样实现:
class Item(models.Model):
data = models.TextField()
order = models.IntegerField()
或者像这样:
class Item(models.Model):
data = models.TextField()
next = models.ForeignKey('self')
什么方式首选? 每个解决方案有哪些缺点?
基本上,您提出的第二个解决方案是链接列表。 在数据库级实现的链表通常不是一个好主意。 要检索n
元素的列表,您将需要n
数据库访问(或使用复杂的查询)。 性能方面,在O(n)中检索列表非常有效。
在常规代码中,与数组相比,链表用于获得更好的插入性能(无需移动所有元素)。 在您的数据库中,仅在2个查询中更新所有元素并不复杂:
UPDATE item.order = item.order + 1 FROM item WHERE order > 3
INSERT INTO item (order, ...) VALUES (3, ...)
我记得看到一个可重复使用的应用程序实现了所有这一切和一个很好的管理界面,但我现在无法找到它...
总而言之,明确使用解决方案#1并远离解决方案#2,除非你有一个非常好的理由不去!
这取决于你想做什么。
第一个似乎更好的是在数据库中进行单个查询并以正确的顺序获取所有数据
第二个似乎更好的是在两个现有元素之间插入一个元素(因为在第一个元素中,如果数字是连续的,你必须更改很多项目)
我会使用第一个,因为它似乎更适合数据库表,这就是django如何存储模型数据。
还有另一种解决方案。
class Item(models.Model):
data = models.TextField()
您可以将Python列表腌制或编组到数据字段中并加载它。 这个适用于更新和阅读,但不适用于搜索,例如获取包含特定项目的所有列表。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.