Во втором случае django игнорирует переменную «foo» или рассматривает ее как литерал.
Это не игнорируется, вы просто устанавливаете атрибут с именем .foo
, факт, что переменная с именем foo
существует, и как-то имеет строку, не имеет значения. Вот как работает Python.
Что вы можете сделать, так это использовать встроенную функцию setattr
[Pyton-doc] :
@receiver(pre_save, sender=MyModel)
def some_signal_function(sender, instance, *args, **kwargs):
foo = 'field_name'
<b>setattr(</b>instance, foo, 'bar'<b>)</b>
Итак, setattr(x, 'y', z)
эквивалентно x.y = z
.