对象保存上的自动递增字段-Django

时间:2019-03-26 13:34:27

标签: django python-3.x

到目前为止,我具有此功能:

def my_number():
    x = '0000'
    return 'MY{0}'.format(str(int(x) + 1).zfill(len(x)))

我这样称呼:

    number_seq = models.CharField(_("Ref."), unique=True, db_index=True,
                             default=my_number, null=True)

它可以工作,但是当我尝试保存新文档时,它只会创建一个新的MY0001,并且应该像MY0002, MY0003这样递增。

这可能是什么原因?

1 个答案:

答案 0 :(得分:2)

我认为您应该声明一个AutoField作为主键,而不是采用您的方法,并且可能有一个名为number_seq的属性方法来获取该值以供参考。例如:

class SomeModel(models.Model):
    your_pk = models.AutoField(primary_key=True)

    @property
    def number_seq(self):
        return 'MY{0}'.format(str(self.your_pk).zfill(4))

但是您不能直接针对它运行查询,例如SomeModel.objects.filter(number_seq="MY001")将不起作用。但是您可以执行以下操作以获取所需的对象。例如:

value = "MY001"
SomeModel.objects.get(pk=int(value[2:]))