在Django中如何在表单提交时自动大写字段?

2024-05-16 05:08:11 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个ProductForm,用户可以使用titlepricecondition等信息向数据库添加Product

如何使用户提交表单时,title字段的第一个字母自动大写?

例如,如果用户在表单中键入“优秀床垫”,django会将其作为“优秀床垫”保存到数据库中。

仅供参考,我之所以这么问是因为当我在页面上显示所有产品对象时,Django的按标题排序功能是区分大小写的。因此,“Bravo”,“world”,“Amazing”会被归类为“Amazing”,“Bravo”,“world”当作为用户时,我们知道这不是字母顺序。

谢谢你的帮助!


Tags: 用户信息数据库表单worldtitle字母product
3条回答

使用Python的^{} function

编辑:

请参阅Jeremy Lewis' answer关于在何处使用此函数。

:)

表单有一个用于清理特定字段(docs)的内置钩子,该钩子将是此代码的清理器(pun-designed)位置:

class ProductForm(forms.Form):
    ...
    def clean_title(self):
        return self.cleaned_data['title'].capitalize()

代码远远少于接受的答案,并且没有不必要的重写。

您可以override the Model's ^{} method(这样做的好处是能够在一个地方简洁地处理多个字段):

class Product(models.Model):
    ...
    def save(self, *args, **kwargs):
        for field_name in ['title', 'price', ... ]:
            val = getattr(self, field_name, False)
            if val:
                setattr(self, field_name, val.capitalize())
        super(Product, self).save(*args, **kwargs)

相关问题 更多 >