如何为模型对象提供可以重新分配的订单(或索引)?

时间:2014-03-02 21:49:44

标签: django django-models

假设您有一个有序列表。您可以根据名为“index”的模型字段对列表进行排序。所以第一项的索引为0,第二项的索引为1,依此类推......

索引对于该模型对象是唯一的。

你会如何实现这个?

我希望能够创建模型对象的更多实例,其中索引被分配给下一个可用索引(将对象添加到列表的末尾)。然后能够重新排序列表,以便在更改对象的索引时,以下所有对象的索引都会增加一个。

3 个答案:

答案 0 :(得分:0)

如果你想要一个增加自身的IntegerField,你可以使用id。它是该模型的独特之处,Django自动生成它。您可以使用

订购

<强>逆

MyModel.objects.all().order_by('-id')

正常顺序:

MyModel.objects.all().order_by('id')

如果您只有一个包含auto-increment-index的字段,则只有在您可以修改它时才需要创建另一个字段,但如果此索引是唯一的,则无法对其进行编辑以防止重复。我会使用id MyModel.id

此处您有.order_by()

的文档

答案 1 :(得分:0)

没有字段可以自动执行此操作。你有没有考虑过使用signals?您可以连接一个检测索引更改的信号,并触发一个函数来更新当前索引大于被删除/更改的对象的索引。

答案 2 :(得分:0)

您可能需要重新考虑您的架构,因为如果您更改列表中第一个元素的索引(可以说100万个元素),那么您将更新100万个对象!您可以为每个对象保存左右“邻居”,并创建一个获取列表的方法。