python - django 中的有序列表

标签 python django django-models

我的问题很简单。我需要创建代表有序列表元素的模型。这个模型可以这样实现:

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,除非你有非常非常好的理由不这样做!

关于python - django 中的有序列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/428149/

相关文章:

django - GEvent/GUnicorn 和 C10k 问题

django.db.utils.OperationalError : (1054,“未知列

python - Python 3.2 中的外来字符

android - 如何在不同的线程上运行不同的进程并将输出输出到第一个线程? Python

python - 为什么 Python json 模块将字典键中的 float 表示为字符串?

python - 更改不同字段时自动更新字段

python - Django - 按相关字段对列表进行排序

python - Python 日志记录处理程序的 dictConfig 配置选项列表?

django - 如何在不同的项目上添加注释?

django-tables2 列集