- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
创建模型对象后,我想使用 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)
信号.py
@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.")
解释:
为什么使用if created
:指定仅在创建新工单时创建一次。它不会在您每次保存同一个对象时更新。
为什么要使用 Ticket.objects.filter(..).update(..)
:我们不能做 instance.save()
因为它会调用它post_save
再次发生递归。查询集上的 .update
不会调用信号,所以我们很安全。
如果你想使用instance.save
,你可能想看看how to prevent post_save recursion in django.
关于django - 如何使用 post_save 通过 django 信号填充模型字段?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56360581/
考虑以下: class OrderForm(models.Model): title = models.CharField(max_length=100) desc = models
我有一个专门与管理员一起使用的应用程序。 我想在每次创建/修改新对象时发送一封电子邮件,从我的搜索来看,使用 post_save 似乎是最好的方法。 不幸的是,文档对此并不太清楚...... 有人可以
我有一个 post_save所有对象(不仅是我的应用程序)的信号,我在其中创建了一个 SignalInfo (此模型来自我的应用程序)对象,将有关创建/编辑对象的信息放入其中并保存。在我开始使用南迁移
我正在应用 post_save 信号来为每个对象应用用户权限,然后相应地过滤查询集。 我的模型是这样的: class Project(models.Model): # Relations wi
阅读文档后, https://docs.djangoproject.com/en/dev/topics/signals/ 我在我的signals.py文件中创建了这个: from django.db.
我需要在 Entry 的新实例时发送电子邮件模型是通过管理面板创建的。所以在 models.py我有: class Entry(models.Model): attachments = m
我有以下代码: @receiver(post_save, sender=SomeModel, dispatch_uid="build") def handle_creation(sender, ins
我已经编写了一些 API,它们各自的功能在事务 block 内执行。我调用save()一个/几个模型的实例上的方法(经过一些修改),并且还在中连续索引了该实例的一些JSON相关信息 Elasticse
我有一个名为 EmailUser 的自定义用户模型我正在尝试在 post_save 上分配自定义模型权限。我在 models.py 中有以下信号 @receiver(post_save, sender
我的模型位于单独的文件中: models \ |__init__.py |event.py |a_thing.py |... 在 __init__.py 中,我导入每个模型,然后设置信号处理。
我有一个个人资料模型,其中包含作为外国关键领域的经验和教育。当我访问个人资料模板时,它会抛出异常。 我尝试过 post_save, def create_education(sender, insta
Django 的 post_save 信号对使用多表继承的模型表现得很奇怪 当使用具有多表继承的模型时,我注意到 Django 的 post_save 信号的工作方式有一个奇怪的行为。 我有这两个模型
我有三个模型:User(来自django.contrib.auth.models)、UserProfile和GameCharacter >. 我设置了以下接收器,以便在创建User时,也会自动创建Us
所以我正在使用 django-simple-history 模块来跟踪模型实例中的变化。但是,它使用 post_save 信号来执行此操作。在我的项目中,我还需要它在 update() 上触发。 我的
所以我阅读了 Django 源代码(1.5 后),您现在可以将多个信号注册到接收器函数: def receiver(signal, **kwargs): """ A decorator
我有一个like 功能,就像社交网络的like 或thumbs up 功能一样;用户点击星号/心形/任何东西来标记喜欢的内容。这是用 ajax 完成的,必须很快。 这里唯一的问题是,由于某些原因,我必
我需要对 Django 中新创建的对象进行一些后台后处理。此后处理应仅在新对象上运行,而不是刚刚更新的对象。 我知道在 pre_save 中我可以检查对象是否有 id,如果没有则它是一个新对象。但问题
docs说: post_save django.db.models.signals.post_save created A boolean; True if a -new- record was cr
模型.py from django.db import models from django.db.models.signals import post_save from django.dispat
以下代码位于 Django 信号中,当副本数为“2”时,以下代码创建 80 多个副本,然后崩溃......出了什么问题? def internal_signal(sender, instance, s
我是一名优秀的程序员,十分优秀!