我正在尝试将django模型中的许多字段用于保存。查看this question,this回答:
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()
答案 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中是不可变的,因此您将无法就地修改该值。