此作品:
@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”或将其视为文字。在变量上使用字符串方法无济于事。在文档中找不到任何内容。
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)
。