Jquery 使用Django&;制作用户可排序列表的有效方法是什么;AJAX

Jquery 使用Django&;制作用户可排序列表的有效方法是什么;AJAX,jquery,ajax,django,Jquery,Ajax,Django,我正在创建的应用程序向用户显示所有模型实例的项目列表。我希望他们能够使用JQuery的sortable()方法对项目进行任意排序。这是实现和正常工作,但我需要一种方法来保存它们的列出顺序。此列表会经常更新,删除项目并添加新项目 我最初的方法是给模型一个“位置”列,每次列表项在列表中移动时,都会更改列表中所有项的位置值。但是,这需要我在每次对1进行排序时获取所有模型对象,并对每个对象应用更改 我唯一能想到的另一种方法是给每个人一个“权重”值,而不是他们的实际列表位置。在每个值之间留出足够的空间以填

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

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

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

我是不是想得太多了?我不希望这个应用程序的使用率很高,所以使用position列的额外型号呼叫不会真的是一个问题-但是如果有更好、更有效的方法来实现这一点,我仍然更愿意这样做


谢谢:-)

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

如果必须将其保存到以后,则可以向模型中添加权重或订单字段,然后在覆盖的保存方法中放入逻辑以处理不断变化的权重。 http://stackoverflow.com/questions/817284/overriding-the-save-method-in-django-modelform

然后可以在查询集中使用order by

现在你让我想得太多了!:)

您可以采用链表样式的方法。给出你的模型前后字段(prev,next,不管你想叫它们什么)。您仍然需要权重字段进行排序,但我认为您可以使用字符字段按字典顺序进行排序

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

  • 设置新条目的下一个字段
  • 将prev字段设置为新条目下一个字段的prev字段
  • 将上一个模型的下一个字段设置为新模型
  • 此外,您需要为新字段选择权重。类似于前一个条目的权重,并附加“.1”,这将很好地排序

    删除和重新排序是相似的

    然后,你需要一个cron工作来随时清理你的体重

    这将使您在插入和重新排序时只命中几个模型

    编辑:事实上,你甚至可能不需要prev和next字段——词典编纂的方法可能会很好——但这并不需要仔细考虑。。。我想我已经想得太多了;)