【发布时间】:2017-11-01 23:20:38
【问题描述】:
对于我的模型,我使用默认的自动递增 PrimaryKey/id 字段。我还有一个名为serialNumber 的字段,根据设计应该引用id 并根据id 值生成它自己的值。
例如,如果id 是1234,那么serialNumber 字段应该是一个字符串'00001234'。
class MyModel(models.Model):
...
serialNumber = models.TextField(max_length=8)
...
在数据库中创建记录后更新serialNumber 没有问题,但我的具体情况需要将serialNumber 与对象初始创建一起设置,因为之后我通过REST API 返回记录。
我尝试使用 signals,但 pre_save 返回 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 的代码添加到序列化程序。
覆盖MyModel 的.save() 方法也不起作用:
def save(self, *args, **kwargs):
print(self.id)
super(MyModel, self).save(*args, **kwargs)
Id 字段仍返回 None。
有人知道如何在初始创建记录期间访问id 值吗?
【问题讨论】:
标签: python django django-rest-framework django-signals