2012-01-14 65 views
4

我试图在我的django模型中保存大量字段。纵观this question,其中有this答案:Django/Python更新字段值(在模型保存期间)

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变量。我想循环访问一个变量列表来改变它们。我知道一些功能会改变这个值,而不使用=。他们如何做到这一点?我可以做到吗?

还是有一些简单的方法来做我在做什么?我走错了路?


SOLUTION: 从第一个答案,我做了以下功能:

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() 

回答

7

您可以使用SETATTR(个体经营,my_field_name,值)为了达成这个。

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

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

+1

非常感谢,这正是我一直在寻找的! – 2012-01-14 19:35:24

+1

很高兴为您服务! – 2012-01-14 19:37:34