对于我的模型,我使用默认的自动递增PrimaryKey/id
字段。我还有一个名为serialNumber
的字段,根据设计,该字段应引用id
并根据id
值生成自己的值。
例如,如果id
为1234
,则serialNumber
字段应为字符串'00001234'
。
class MyModel(models.Model):
...
serialNumber = models.TextField(max_length=8)
...
我在DB中创建记录后更新serialNumber
没有问题,但我的具体情况需要将serialNumber
与对象初始创建一起设置,因为在它之后我通过{{返回记录1}}。
我尝试使用REST API
,但pre_save返回signals
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
返回带有已创建对象的回复并且我不想添加管理serialNumber
到序列化程序的代码。
覆盖.save()
的{{1}}方法无效:
MyModel
def save(self, *args, **kwargs):
print(self.id)
super(MyModel, self).save(*args, **kwargs)
字段仍会返回Id
。
任何人都知道如何在初始创建记录期间访问None
值?
答案 0 :(得分:1)
在保存之前,您无法访问ID。
ID将由数据库生成,因此您必须调用save
方法,以便django将数据发送到数据库,然后您将拥有您的ID
django文件中也对此进行了解释:
Auto-incrementing primary keys
如果您确实需要访问作为唯一标识符的ID,则可以手动创建一个。
你可以添加一个名为my_id
的字段,然后在保存数据之前给它一个唯一的值(你只需要检查该值是否已经存在,如果已存在,那么只需创建另一个值)。这样,您就可以获得一个唯一的ID,以便将来能够找到该行。