在创建 Django 记录期间访问主 key/id 值
Access primary key/id value during creation of a Django record
对于我的模型,我使用默认的自动递增 PrimaryKey/id
字段。我还有一个名为 serialNumber
的字段,根据设计,它应该引用 id
并根据 id
值生成它自己的值。
例如,如果 id
是 1234
,那么 serialNumber
字段应该是一个字符串 '00001234'
.
class MyModel(models.Model):
...
serialNumber = models.TextField(max_length=8)
...
我在数据库中创建记录后更新 serialNumber
没问题,但我的具体情况需要 serialNumber
与对象初始创建一起设置,因为紧接着我 return 通过 REST API
.
记录
我尝试使用 signals
,但是 pre_save returns None
@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()
之后,我的 REST API
return 对创建的对象做出了响应,我不想将管理 serialNumber
的代码添加到序列化程序。
覆盖 MyModel
的 .save()
方法也不起作用:
def save(self, *args, **kwargs):
print(self.id)
super(MyModel, self).save(*args, **kwargs)
Id
字段仍然 returns None
.
有人知道如何在初始创建记录期间访问 id
值吗?
嗯,您无法在保存 ID 之前访问它。
ID 将由数据库生成,因此您必须调用 save
方法,以便 django 将数据发送到数据库,然后您将获得您的 ID
这在 django 文档中也有解释:
Auto-incrementing primary keys
如果您确实需要访问唯一标识的ID,您可以手动创建一个。
您可以添加一个名为 my_id
的字段,然后在保存数据之前为其赋予一个唯一值(您只需要检查该值是否已经存在,如果存在,则只需创建另一个).这样您就可以获得一个唯一的 ID,以后您可以使用该 ID 找到该行。
对于我的模型,我使用默认的自动递增 PrimaryKey/id
字段。我还有一个名为 serialNumber
的字段,根据设计,它应该引用 id
并根据 id
值生成它自己的值。
例如,如果 id
是 1234
,那么 serialNumber
字段应该是一个字符串 '00001234'
.
class MyModel(models.Model):
...
serialNumber = models.TextField(max_length=8)
...
我在数据库中创建记录后更新 serialNumber
没问题,但我的具体情况需要 serialNumber
与对象初始创建一起设置,因为紧接着我 return 通过 REST API
.
我尝试使用 signals
,但是 pre_save returns None
@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()
之后,我的 REST API
return 对创建的对象做出了响应,我不想将管理 serialNumber
的代码添加到序列化程序。
覆盖 MyModel
的 .save()
方法也不起作用:
def save(self, *args, **kwargs):
print(self.id)
super(MyModel, self).save(*args, **kwargs)
Id
字段仍然 returns None
.
有人知道如何在初始创建记录期间访问 id
值吗?
嗯,您无法在保存 ID 之前访问它。
ID 将由数据库生成,因此您必须调用 save
方法,以便 django 将数据发送到数据库,然后您将获得您的 ID
这在 django 文档中也有解释:
Auto-incrementing primary keys
如果您确实需要访问唯一标识的ID,您可以手动创建一个。
您可以添加一个名为 my_id
的字段,然后在保存数据之前为其赋予一个唯一值(您只需要检查该值是否已经存在,如果存在,则只需创建另一个).这样您就可以获得一个唯一的 ID,以后您可以使用该 ID 找到该行。