使用Django&amp ;;制作用户可排序列表的有效方法是什么?阿贾克斯?

时间:2011-02-08 19:24:17

标签: jquery ajax django

我正在创建的应用向用户显示所有模型实例的项目列表。我希望他们能够使用JQuery的sortable()方法对项目进行排序。这是实现并正常工作,但我需要一种方法来保存它们的列出顺序。此列表会更频繁地更新,项目将被删除并添加新项目。

我最初的方法是给模型一个“位置”列,每次在列表中移动一个列表项时,更改列表中所有项的位置值。但是,这需要我每次对1进行排序时获取所有模型对象,并对每个模型对象进行更改。

我能想出的另一种方法是给每个人一个“重量”值,而不是他们的实际列表位置。在每个值之间留出足够的空间以填补空白。例如,权重是10,20,30和10。 40.如果用户将第四个项目移动到第二个位置,请查看第一个和第二个项目,然后选择15作为其权重。当然,只有在为了放置物品而必须重新计算所有重量之前,这才会有效。

我是否过度思考这个?我不希望这个应用程序的高使用率,所以使用位置列的额外模型调用不会真的成为问题 - 但如果有更好,更有效的方法来做到这一点,我会仍然喜欢这样做。

谢谢: - )

3 个答案:

答案 0 :(得分:1)

如果必须将其保存的时间晚于向模型添加权重或订单字段,然后将逻辑放入以在重写的保存方法中处理更改的权重。 http://docs.djangoproject.com/en/dev/ref/models/instances/#saving-objects http://stackoverflow.com/questions/817284/overriding-the-save-method-in-django-modelform

然后您可以在查询集中使用order by http://docs.djangoproject.com/en/dev/ref/models/querysets/#order-by

答案 1 :(得分:1)

现在你让我过度思考这个! :)

您可以采用链表样式方法。在字段之前和之后给出您的模型(上一个,下一个,无论您想要什么称呼它们)。你仍然需要你的权重字段进行排序,但我认为你可以使用字符字段按字典顺序排序。

因此,添加新条目意味着标准链接列表插入:

  1. 设置新条目的下一个字段
  2. 将prev字段设置为新条目的下一个字段的prev字段
  3. 将prev模型的下一个字段设置为新模型。
  4. 此外,您需要为新字段选择一个重量。像之前条目的重量一样附加“.1”,这将很好。

    删除和重新排序类似。

    然后你需要一个cron工作来不时地清理你的重量。

    这会减少您在插入和重新排序时仅点击几个模型...

    编辑:实际上,你可能甚至不需要上一个和下一个字段 - 词典编纂方法也可以正常工作 - 但这并没有考虑到它太难......我想我已经想得太多了关于这个;)

答案 2 :(得分:0)

我会在浏览器中跟踪排序顺序,并在每次对表进行排序时对服务器进行ajax调用,将排序顺序保存到会话变量中。 (http://docs.djangoproject.com/en/dev/topics/http/sessions/)