Django / Python更新字段值(在模型保存期间)

时间:2012-01-14 19:19:03

标签: python django django-models

我正在尝试将django模型中的许多字段用于保存。查看this questionthis回答:

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 个答案:

答案 0 :(得分:7)

您可以使用setattr(self,my_field_name,value)来实现此目的。

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

由于字符串在Python中是不可变的,因此您将无法就地修改该值。