为什么变量在Django信号中不与“实例”一起使用?

问题描述 投票:1回答:1

此作品:

@receiver(pre_save, sender=MyModel)
def some_signal_function(sender, instance, *args, **kwargs):

    instance.field_name = 'foo'

    return None

...这将把'foo'保存为field_name。很简单。

但是为什么不起作用:

@receiver(pre_save, sender=MyModel)
def some_signal_function(sender, instance, *args, **kwargs):

    foo = 'field_name'
    instance.foo = 'bar'

    return None

在第二种情况下,django忽略变量“ foo”或将其视为文字。在变量上使用字符串方法无济于事。在文档中找不到任何内容。

django django-signals
1个回答
0
投票
由于这是Python的工作方式,因此您在此处为foo属性分配了一个值。您可以做的是利用setattr builtin function [Pyton-doc]

setattr

所以@receiver(pre_save, sender=MyModel)
def some_signal_function(sender, instance, *args, **kwargs):
    foo = 'field_name'
    setattr(instance, foo, 'bar')等效于setattr(x, 'y', z)
© www.soinside.com 2019 - 2024. All rights reserved.