Как использовать переменные в качестве имен полей для динамического обновления объектов в Django
в приведенной ниже модели в приложении Django есть три поля, просто для примера.
class MyModel(models.Model):
field1 = models.IntegerField(default=0, blank=False,null=False)
field2 = models.IntegerField(default=0, blank=False,null=False)
field3 = models.IntegerField(default=0, blank=False,null=False)
Для обновления нескольких полей я хочу использовать переменную "target_field" вместо использования каждого имени поля.
for i in (1,3):
target_field = "field{0}".format(i)
sample_object = get_object_or_404(MyModel, id=sample_d)
sample_object.target_field = "sample_value" # this couldn't work.
sample_object.save()
В описанном выше коде "target_field" не распознается как имя поля.
Вы можете попробовать использовать exec(), чтобы обойти это.
exec(sample_object+"."+target_field+"='sample value'")
Это должно работать, если sample_object и target_field являются строками и объект создается в main. Я использовал этот метод для динамической установки значений переменным в некоторых из моих предыдущих проектов.
Вы можете установить поле модели так же, как и любой другой атрибут класса:
for i in (1,3):
target_field = "field{0}".format(i)
sample_value = some_list[i]
sample_object = get_object_or_404(MyModel, id=sample_d)
setattr(sample_object, target_field, sample_value)
sample_object.save()