【问题标题】:How to get an auto-incrementing sort order in a Django model如何在 Django 模型中获得自动递增的排序顺序
【发布时间】:2013-03-06 18:02:17
【问题描述】:

这是我写的:

class Department(models.Model):
    ...
    sort_order = models.IntegerField(help_text="Leave negative to place at end", default=-1)

    def save(self, *args, **kwargs):
        """ Set the sort order (if unset) to larger than the largest value"""
        if self.sort_order <= 0:
            largest = Department.objects.all().aggregate(x = models.Max('sort_order'))['x'] or 0
            self.sort_order = largest + 10
        super(Department, self).save(*args, **kwargs)

但我并不以此为荣。有一个更好的方法吗?我可以将它滚动到一个字段中,但不确定如果我在那里重构代码,我将如何返回模型表。我不能使用自动增量列,因为作为 FK 值,这些值无法更改。

【问题讨论】:

标签: django django-models


【解决方案1】:

似乎来自Django Positions 的 PositionField 执行此操作,并且当前正在与 Django CrowdSourcing 一起使用。这并不完全符合我的要求,但似乎它可能是一个很好的可用解决方案。

【讨论】:

    【解决方案2】:

    对不起,如果我很迟钝,但是 django 内置的 AutoField 不能满足您的需求。

    我知道你不想弄乱主键,但你可以创建另一个 AutoField

    sort_field = models.AutoField()
    

    也许您可以考虑覆盖 AutoField 来做您想做的事情。

    【讨论】:

    • 根据代码:“一个模型不能有多个 AutoField。”所以,如果你有一个 id 字段,你就不能有一个 sort_order 字段。我想你可以让 sort_order 成为主键,但是如果你通过一个可以改变的 ID 删除,那会导致各种奇怪的行为。
    • 对不起,我的错,我应该在发布答案之前检查一下。我在这里找到了有关多个 Auto 字段实现的更多信息 - code.djangoproject.com/ticket/8576
    猜你喜欢
    • 1970-01-01
    • 2021-03-23
    • 1970-01-01
    • 2010-11-01
    • 2021-01-16
    • 1970-01-01
    • 2023-01-31
    • 2012-09-09
    • 1970-01-01
    相关资源
    最近更新 更多