Я пытаюсь использовать несколько полей в моих моделях django, когда они сохраняются. Глядя на этот вопрос , который имел этот ответ:
class Blog(models.Model):
name = models.CharField(max_length=100)
def save(self):
self.name = self.name.title()
super(Blog, self).save()
Это прекрасно работает, однако, при каждом сохранении, это требует некоторого дополнительного набора текста, если я хочу повторить это несколько раз. Поэтому я хотел бы создать функцию, которая принимает поля в качестве входных данных и повторно сохраняет их в верхнем регистре на этапе сохранения. Поэтому я написал это, чтобы проверить это:
def save(self):
for field in [self.first_name, self.last_name]:
field = field.title()
super(Artist,self).save()
Однако, если бы я думал об этом раньше, я бы понял, что это просто перезаписывает переменную field
. Я хочу просмотреть список переменных, чтобы изменить их. Я знаю, что некоторые функции меняют значение на месте, без использования =
. Как они это делают? Могу ли я достичь этого?
Или есть какой-то более простой способ сделать то, что я делаю? Я иду неправильным путем?
РЕШЕНИЕ:
Из первого ответа я сделал функцию:
def cap(self, *args):
for field in args:
value = getattr(self, field)
setattr(self, field, value.title())
и в моих моделях:
def save(self):
cap(self,'first_name', 'last_name')
super(Artist,self).save()