django中的自定义订单autofield

时间:2015-11-27 14:30:35

标签: python django django-models django-admin

我有两个django模型:

class Question(models.Model):
    question = models.CharField(max_length=100)
    # some other not important to my question fields

class Field(models.Model):
    question = models.ForeignKey(Question)
    order = models.PositiveSmallIntegerField(default=1)
order类上的

Field字段应该告诉我Question字段的显示顺序。如何让问题自动增加?例如,我打开django admin,添加一个问题,为一个问题添加一个字段,当我想为同一个问题添加另一个字段时,我希望看到该字段增加1,因为我已经有了订单号为1的字段。有没有办法实现(自动增量)?我确实意识到如果我想稍后改变订单,那可能是非常乏味的任务。也许我有这个问题有更好的解决方案(手动指定DB中带有整数字段的条目的顺序)而不是DB中的列?

1 个答案:

答案 0 :(得分:0)

您可以使用AutoField自动增加字段,与id字段相同。

class Field(models.Model):
    question = models.ForeignKey(Question)
    order = models.AutoField(primary_key=False)

或者您可以通过覆盖保存方法自行完成:

from django.db.models import F


class Field(models.Model):
    ...
    def save(self, *args, **kwargs):
        if not self.order:
            # Using F object is important
            self.order = F('order') + 1
        return super(Field, self).save(*args, **kwargs)