Django 菜单项排序

发布于 2024-08-28 09:55:53 字数 331 浏览 6 评论 0原文

我有 MenuItem 模型:

MenuItem(models.Model)
name=models.CharField(max_length=50)
url = models.URLField() 
position = models.IntegerField() 

Class Meta: 
ordering =['position'] 

然后我通过 MenuItem.objects.all() 检索它

我的问题是如何在管理面板中制作任何用户友好的界面以允许对 MenuItems 进行排序 - 例如带有 + 和 - 按钮移动的列表菜单项向上和向下....

i've got MenuItem model :

MenuItem(models.Model)
name=models.CharField(max_length=50)
url = models.URLField() 
position = models.IntegerField() 

Class Meta: 
ordering =['position'] 

then i'm retriving it by MenuItem.objects.all()

My question is how can i make any user friendly interface in admin panel to allow sorting MenuItems - for example list with + and - buttons to move MenuItem up and down ....

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

够运 2024-09-04 09:55:53

从简单开始(对于作为开发人员的您来说),您可以相当轻松地在 ListView 中显示位置。

您可以添加一些 javascript 将位置的每个显示变成 -/+ 控制器。
您可以使这些 +/- 小部件具有 onclick 处理程序,这些处理程序对处理排序的自定义视图进行 ajax 调用。

ajax 视图相当简单,您只需按顺序获取前一个元素:

old_pos = ItemToBumpDown.position
DisplacedItem = MenuItems.objects.filter(position__lt = ItemToBumpDown.position)[0]
ItemToBumpDown.position = DisplacedItem.position
DisplacedItem.position = old_pos
ItemToBumpDown.save()
DisplacedItem.save()

调用完成时的 ajax 回调可以将调整后的项目的管理行与其上一个或下一个元素交换。

您可能需要做一些润色,但这应该是一个开始。

Start simple (for you as a developer), you can fairly easily display the position in a ListView.

You can add some javascript to turn each display of the position into a -/+ controller.
You can make those +/- widgets have onclick handlers that do an ajax call to a custom view that handles the sorting.

The ajax view is fairly simple, you just grab the previous element in order:

old_pos = ItemToBumpDown.position
DisplacedItem = MenuItems.objects.filter(position__lt = ItemToBumpDown.position)[0]
ItemToBumpDown.position = DisplacedItem.position
DisplacedItem.position = old_pos
ItemToBumpDown.save()
DisplacedItem.save()

Your ajax callback when the call is complete can be to swap the admin row of the adjusted item with either it's previous or next element.

There's some polishing you might need to do, but this should be a start.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文