Python 在创建Django记录期间访问主键/id值

Python 在创建Django记录期间访问主键/id值,python,django,django-rest-framework,django-signals,Python,Django,Django Rest Framework,Django Signals,对于我的模型,我使用默认的自动递增PrimaryKey/id字段。我还有一个名为serialNumber的字段,根据设计,它应该引用id,并基于id值生成自己的值。 例如,如果id为1234,则serialNumber字段应为字符串'0000124' class MyModel(models.Model): ... serialNumber = models.TextField(max_length=8) ... 在DB中创建记录后,我更新serialNumber没有问

对于我的模型,我使用默认的自动递增
PrimaryKey/id
字段。我还有一个名为
serialNumber
的字段,根据设计,它应该引用
id
,并基于
id
值生成自己的值。 例如,如果
id
1234
,则
serialNumber
字段应为字符串
'0000124'

class MyModel(models.Model):
    ...
    serialNumber = models.TextField(max_length=8)
    ...
在DB中创建记录后,我更新
serialNumber
没有问题,但我的具体情况要求将
serialNumber
与对象初始创建一起设置,因为在它之后,我立即通过
restapi
返回记录

我尝试使用
信号
,但pre_save返回

@receiver(pre_save, sender=MyModel)
def my_pre_save(sender, instance, **kwargs):
    print(instance.id)
另一方面,如果我这样做:

@receiver(post_save, sender=MyModel)
def my_post_save(sender, instance, **kwargs):
    print(instance.id)
我收到了
id
的值,但为时已晚,因为就在
.save()
my
restapi
之后,我的
restapi
返回创建对象的响应,我不想将管理
serialNumber
的代码添加到序列化程序中

MyModel
重写
.save()
方法也不起作用:

    def save(self, *args, **kwargs):
        print(self.id)
        super(MyModel, self).save(*args, **kwargs)
Id
字段仍然返回
None


任何人都知道如何在初始创建记录时访问
id
值吗?

在保存之前,您无法访问id。 ID将由数据库生成,所以您必须调用
save
方法,以便django将数据发送到数据库,然后您将获得您的ID

django文件中也解释了这一点:

如果您确实需要访问作为唯一标识符的ID,您可以手动创建一个ID

您可以添加一个名为
my_id
的字段,然后在保存数据之前为其指定一个唯一的值(您只需检查该值是否已存在,如果已存在,则只需创建另一个值)。这样,您将能够获得一个唯一的ID,您将能够在将来找到该行