Как выполнить однотипное действие с разными полями модели в Django/Python
Например, есть модель
class Model(models.Model):
field1 = models.CharField()
field2 = models.CharField()
field3 = models.CharField()
...
В Views я пишу метод, в котором хочу по очереди обратиться к полям экземпляра модели и изменить их значение, например с помощью такой конструкции
model.field1.some_functions(args1)
model.field2.some_functions(args2)
model.field3.some_functions(args3)
...
Могу ли я организовать некий перебор по полям модели, указав выполнить одинаковое действие, вместо того, чтобы явно прописывать для каждого поля метод работы с ним?
Вопрос не столько про django, сколько про python в целом.
Ответы (1 шт):
Автор решения: Алексей Власов
→ Ссылка
Вы можете использовать getattr.
Код:
select_fields = ['field1', 'field2', 'field3', ... ] # нужные поля
for field_str in select_fields:
# field_str - это строка (название поля)
field = getattr(model, field_str) # model - это ваш класс
field.somefunction()
У getattr мы первым аргументом передаём класс, а вторым название элемента в виде строки.
Надеюсь помог