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

5 投票
1 回答
6961 浏览
提问于 2025-04-17 10:15

我想在我的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 中,字符串是不可变的。

撰写回答