如何使用post_save通过django信号填充模型字段?

如何使用post_save通过django信号填充模型字段?,django,Django,创建模型对象后,我希望使用post_save信号用ID和其他值填充同一对象中的另一个模型字段 但这里真正的问题是,如何从实例访问字段?没用 示例: 用户创建了一个对象->id对象是93->我想添加\00093作为同一对象中另一个字段的值 型号.py class Ticket(models.Model): user = models.ForeignKey(User, on_delete=models.SET_NULL, null=True) designation = models

创建模型对象后,我希望使用
post_save
信号用ID和其他值填充同一对象中的另一个模型字段

但这里真正的问题是,如何从实例访问字段?没用

示例: 用户创建了一个对象->
id
对象是93->我想添加
\00093
作为同一对象中另一个字段的值

型号.py

class Ticket(models.Model):
    user = models.ForeignKey(User, on_delete=models.SET_NULL, null=True)
    designation = models.CharField(max_length=255, blank=True, null=True)
    summary = models.CharField(max_length=255)
@receiver(post_save, sender=Ticket)
def ticket_designation(sender, instance, **kwargs):
    instance.designation = "#" + "000" + str(instance.id)
    print("Ticket" + instance.designation + " was created.")
信号.py

class Ticket(models.Model):
    user = models.ForeignKey(User, on_delete=models.SET_NULL, null=True)
    designation = models.CharField(max_length=255, blank=True, null=True)
    summary = models.CharField(max_length=255)
@receiver(post_save, sender=Ticket)
def ticket_designation(sender, instance, **kwargs):
    instance.designation = "#" + "000" + str(instance.id)
    print("Ticket" + instance.designation + " was created.")

我想你真的想这么做:

@receiver(post_save, sender=Ticket)
def ticket_designation(sender, instance, created, **kwargs):
    if created:
        designation = "#" + "000" + str(instance.id)
        Ticket.filter(pk=instance.pk).update(designation=designation)
        print("Ticket" + instance.designation + " was created.")
说明:

如果创建了,为什么要使用
:创建新票证时仅创建一次指定。它不会在每次保存同一对象时更新

为什么要使用
Ticket.objects.filter(..).update(..)
:我们无法执行
instance.save()
,因为它将再次调用此
post\u save
,并发生递归.update
不会调用信号,因此我们是安全的



如果您想使用
instance.save
您可能想查看您想在
post\u save
信号运行时创建一次或每次创建
designation
吗?一旦对象创建成功,我就必须对其进行全面调整,以实现自定义目的,但多亏了你的过滤器+更新推荐,我才有了窍门,非常感谢。祝你度过愉快的一天!