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()
myrestapi
之后,我的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,您将能够在将来找到该行