Значения полей обновления Django / Python (при сохранении модели) - PullRequest
5 голосов
/ 14 января 2012

Я пытаюсь использовать несколько полей в моих моделях 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()

1 Ответ

7 голосов
/ 14 января 2012

Для этого вы можете использовать setattr (self, my_field_name, value).

for field in ['first_name', 'last_name']: 
    value = getattr(self, field)
    setattr(self, field, value.title())

Вы не сможете изменить значение на месте, так как строки в Python являются неизменяемыми.

...