2011-02-08 45 views
0

我正在创建的应用程序向用户显示所有模型实例的项目列表。我希望他们能够使用JQuery的sortable()方法对项目进行排序。这是实施和正常工作,但我需要一种方法来保存它们列出的顺序。此列表更新频率较高,项目被删除并添加新项目。用Django&Ajax制作用户可排序列表的有效方法是什么?

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

我能想出的唯一方法是给每个“重量”值,而不是他们的实际列表位置。在每个值之间留出足够的空间以填补空白。举例来说,权重为10,20,30,120。如果用户将第四项移动到第二位置,则看第一项和第二项并选择15作为其权重。这当然只能在所有重量必须重新计算才能放置物品之前运行。

我是否在推翻这个?我不期望从这个应用程序的高使用率,所以额外的模型调用使用位置列不会真的是一个问题 - 但如果有一个更好,更有效的方法来做到这一点,我仍然会喜欢做它那样。

感谢:-)

回答

0

我会跟踪浏览器的排列顺序,使每个表得到了排序,节省了排序顺序,以会话变量时一个AJAX调用服务器。 (http://docs.djangoproject.com/en/dev/topics/http/sessions/)

1

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

你可以采取链接列表样式的方法。在领域之前和之后给予你的模型(prev,next,无论你想给他们打电话)。你仍然需要你的体重字段进行排序,但我认为你可以使用字符字典按字典顺序排序。

因此添加新条目指标准链接列表中插入:

  1. 设置的新条目
  2. 的分组字段设置为新条目的下一个字段的分组字段的下一个字段
  3. 将prev模型的下一个字段设置为新模型。

此外,你需要为你的新领域选择一个重量。就像之前的条目的重量一样,附加了“.1”,这会很好地排序。

去除和重新排序是相似的。

然后,你需要一个cron作业一起去和每一个现在,然后清理你的权重。

这会降低你只打了几个模型,当你插入和重排...

编辑:其实,你可能甚至不需要prev和next领域 - 的辞书方法可能只是工作精 - 但是这没有经过太硬想......我想我已经想太多关于这个已;)

相关问题