通过Django管理网站添加数据时更改字母大小写(大写/小写)
我正在设置我新项目的管理网站,但我有个小疑问,就是在管理网站上添加数据时,点击“保存”后,所有内容都会变成大写字母,这该怎么解决呢?
补充一下:我知道有一个 .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)