Django/Python 更新字段值(在模型保存时)
我想在我的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
你可以使用 setattr(self, my_field_name, value) 来实现这个功能。
for field in ['first_name', 'last_name']:
value = getattr(self, field)
setattr(self, field, value.title())
你不能直接修改字符串的值,因为在 Python 中,字符串是不可变的。