- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在 MyModel 上定义了一个 pre_save,它看起来像这样:
@receiver(pre_save, sender=MyModel)
def _mymodel_pre_save(sender, instance, **kwargs):
if some_condition():
instance.somecolumn = 'eggs'
即它希望能够修改 MyModel 实例的某些属性,并且当然希望这些更改在 save() 调用期间保持不变。我相信这是 pre_save 函数的典型用法。 只要 save() 调用不指定 update_fields 就可以正常工作。
我想知道此时是否有任何安全合理的方法在 MyModel 实例的 save() 调用中使用 update_fields。如果我天真地调用:
myinstance = MyModel.objects.get(id=100)
myinstance.othercolumn = 'spam'
myinstance.save(update_fields=['othercolumn'])
生成的 UPDATE 语句如下所示:
UPDATE "myapp_mymodel" SET "othercolumn" = 'spam' WHERE "myapp_mymodel"."id" = 100
缺少 pre_save 中“somecolumn”的预期更新。我想可以通过查看 pre_save 函数可用的 update_fields(作为卡住集)从 pre_save 内部检测到这种情况,但是我看不到 pre_save 强制执行其预期更改的任何方式调用者有一组更严格的 update_fields,如上例所示。或者有什么解决方法吗?
最佳答案
解决方法是:
@receiver(pre_save, sender=MyModel)
def _mymodel_pre_save(sender, instance, **kwargs):
if some_condition():
instance.somecolumn = 'eggs'
instance.save()
注意额外的“instance.save()”调用。
但是在执行 instance.somecolumn = 'eggs' 之后,您必须确保 some_condition() 不再为 True。否则,将导致保存/预保存/保存/预保存调用循环
关于python - 在指定 update_fields 时使用 pre_save,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25123960/
假设我有一个名为 A 的模型,它有一个名为 name 的字段。如何在 pre_save 信号中获取以前的值和新值? @receiver(pre_save, sender=A) def signal_p
我有一个模型类“Action”,它由其他几个类扩展。我是 django 的新手,假设如果我调用 pre_save.connect(actionFunc, sender=Action) ,则只要调用 A
我的模型中有两个必填字段,我想在 ModelViewSet 的 pre_save 方法中填充它们。尽管将它们设置在那里,但在提交 .create() 请求时,我仍然收到一个错误,指出这两个字段是必需的
我正在使用 Django 信号进行数据反规范化。这是我的代码: # vote was saved @receiver(pre_save, sender=Vote) def update_post_vo
我通过以下方式测试了Django的“pre_save”信号,但都无法捕捉到信号。 $ from django.db.models.signals import pre_save import logg
我有一个 Order (1) 和 OrderLine (n) 模型,这里的订单可以有多个订单行。这都是从 Django-admin 内部运行的,其中 OrderLine设置为 inlines 的一部分
如果在处理 instance 中的数据期间出现问题,我想通知用户。在我的 pre_save接收器功能。 是否可以提高自定义ValidationError从接收器功能?如果没有,我将如何实现这样的事情?
以下是我的模型: class Product(models.Model): product_title = models.CharField(max_length=100, null=Fals
我在 MyModel 上定义了一个 pre_save,它看起来像这样: @receiver(pre_save, sender=MyModel) def _mymodel_pre_save(sender
我想在创建用户之前执行一些自定义操作。我想到了为此使用 pre_save 信号。如果其中一个操作会引发异常,则停止事务、中止创建用户等。 这是要走的路吗?如果在此步骤中出现问题(这是必需的行为),它会
我正在使用 Python mongoengine,我想定义回调,每次更新文档时都会调用它。 from mongoengine import * from mongoengine import sign
我正在 Django 1.6 中开发一个通知应用程序,我想将其他参数传递给 Django 信号,例如 post_save .我尝试使用 functools 中的部分,但没有运气。 from funct
当一个字段发生变化时,我需要执行一些操作。 由于此操作需要使用已保存的对象,因此我无法像这样使用 pre_save 信号: @receiver(pre_save, sender=reservation
我必须执行 multi-aspect type of inheritance from UML在 Django ORM 中。我有 Contract 数据类型,根据客户类型(普通客户或商业客户)可以将其
我有一个用于生成 slug 的自定义字段,并且我在我的模型中使用它。 奇怪的是,我无法弄清楚为什么我在此自定义字段的方法 pre_save 中生成的值没有在当前实例上设置。 我的问题不是关于以不同方式
获得 Django 1.11 应用程序。一切工作正常,除了 pre_save 信号出现奇怪的问题。在我的模型中,我有两个多对多字段,用于计算相关模型中的总成本(带宽和许可证)。 我创建了一个 pre_
我有一个模型: class A(models.Model): number = models.IntegerField() 但是当我调用 A.save() 时,我想确保该数字是质数(或其他条件
class TodoList(models.Model): title = models.CharField(maxlength=100) slug = models.SlugFiel
我有两个模型。当我保存第一个实例时,我需要将这个模型的字段值发送到另一个模型的字段中。 第一个模型: class ModelOne(models.Model): # fields...
如果之前已经回答过这个问题但已经搜索了几个小时,我们深表歉意。 我正在尝试对带有 m2m 字段的 django rest 模型进行验证。我有一个分配有角色的模型。如果角色与现有模型重叠并且想抛出验证错
我是一名优秀的程序员,十分优秀!