【问题标题】:Ordering models using Django AutoField with custom step size使用带有自定义步长的 Django AutoField 订购模型
【发布时间】:2021-01-06 00:24:30
【问题描述】:

考虑一个模型Section,它显示在站点上并由用户使用 Django 管理界面创建/编辑。我想添加一个字段,允许用户轻松控制部分在网站上显示的顺序。最简单的选项似乎是允许自动递增但可以由用户编辑的整数字段——类似于内置的 AutoField 所做的。

但是,为了更轻松地编辑订单,我希望每次将字段默认值增加 10,以便用户更轻松地切换部分。第一个部分会得到order=1,下一个会得到order=11,依此类推,这样一个部分可以通过给出它来插入前两个部分之间,例如order=6

有没有办法可以重用AutoField 来实现这个目的?如果没有,我怎样才能最好地实现这种类型的订购方案?

理想情况下,我想要达到的效果应该是这样的:

from django.db import models

class Section(models.Model):
    text = models.TextField()
    order = AutoField(step=10)
    
    class Meta:
        ordering = ('order',)

【问题讨论】:

标签: django auto-increment


【解决方案1】:

自动字段不起作用。不可编辑,需要为主键。

我还建议在 UI 中使用拖放来直观地解决这个问题,然后重新排列整体中的所有部分,而不是允许楔入。如果两个人同时在 20 和 30 之间楔入 25,你仍然有同样的问题。保存时重新排序是一种更简洁的解决方案,尤其是在使用 select_for_update 时:

返回一个查询集,它将锁定行直到事务结束,在支持的数据库上生成一个 SELECT ... FOR UPDATE SQL 语句。

【讨论】:

    猜你喜欢
    • 2017-08-13
    • 1970-01-01
    • 2017-04-18
    • 2018-06-04
    • 2016-02-01
    • 2013-04-13
    • 1970-01-01
    • 1970-01-01
    • 2015-10-14
    相关资源
    最近更新 更多