通过Django管理网站添加数据时更改字母大小写(大写/小写)

8 投票
3 回答
20269 浏览
提问于 2025-04-15 11:24

我正在设置我新项目的管理网站,但我有个小疑问,就是在管理网站上添加数据时,点击“保存”后,所有内容都会变成大写字母,这该怎么解决呢?

补充一下:我知道有一个 .upper 的属性,如果我做一个视图的话,我知道怎么处理,但我在想,管理网站的字段配置里有没有现成的属性可以用呢 :P

3 个回答

1

你需要重写 save() 方法。下面是文档中的一个例子:

class Blog(models.Model):
    name = models.CharField(max_length=100)
    tagline = models.TextField()

    def save(self, force_insert=False, force_update=False):
        do_something()
        super(Blog, self).save(force_insert, force_update) # Call the "real" save() method.
        do_something_else()
4

更新的文档示例建议使用 args 和 kwargs 来传递参数,具体如下:

Django 有时会扩展内置模型方法的功能,增加新的参数。如果你在方法定义中使用 *args 和 **kwargs,那么当这些参数被添加时,你的代码就能自动支持它们。

class Blog(models.Model):
    name = models.CharField(max_length=100)
    tagline = models.TextField()

    def save(self, *args, **kwargs):
        do_something()
        super(Blog, self).save( *args, **kwargs) # Call the "real" save() method.
        do_something_else()
19

如果你想在管理后台保存数据的时候,自动把内容变成大写字母,你需要创建一个带有自定义验证的表单,这样就能实现字母大小写的转换了。

class MyArticleAdminForm(forms.ModelForm):
    class Meta:
        model = Article
    def clean_name(self):
        return self.cleaned_data["name"].upper()

如果你希望每次保存的值都保持为大写字母,那么你应该重写模型字段中的保存方法

class Blog(models.Model):
    name = models.CharField(max_length=100)
    def save(self, force_insert=False, force_update=False):
        self.name = self.name.upper()
        super(Blog, self).save(force_insert, force_update)

撰写回答