如何解决使用具有自定义步长的Django AutoField订购模型
请考虑一个模型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',)
解决方法
Autofield无法正常工作。不可编辑,需要为主键。
我还建议通过在UI中拖放来视觉化地解决此问题,然后对整个区域中的所有部分重新排序,而不是允许楔入。如果两个人同时将20和30楔入25,您仍然会遇到相同的问题。在保存时重新排序是一种更简洁的解决方案,尤其是在使用select_for_update
时:
返回一个查询集,该查询集将锁定行直到事务结束,从而在受支持的数据库上生成SELECT ... FOR UPDATE SQL语句。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。