加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

django – 如何在模型中直接使用大写的所有CharField?

发布时间:2020-12-20 12:40:53 所属栏目:Python 来源:网络整理
导读:在我的所有Django模型中,我尝试在所有CharField中使用UpperCase. 今天我的save方法中有一些代码: def save(self,*args,**kwargs): for field_name in ['razao_social','nome_fantasia','cidade','endereco','bairro','uf','cli_parc_nomeparc','cli_repr_no
在我的所有Django模型中,我尝试在所有CharField中使用UpperCase.

今天我的save方法中有一些代码:

def save(self,*args,**kwargs):
        for field_name in ['razao_social','nome_fantasia','cidade','endereco','bairro','uf','cli_parc_nomeparc','cli_repr_nomerepr']:
            val = getattr(self,field_name,False)
            if val:
                setattr(self,val.upper())
        super(Pessoa,self).save(*args,**kwargs)

但它需要一些时间.有什么方法可以在我的模型中放置一些大写= True?

谢谢.

解决方法

正确的方法是定义自定义模型字段:

from django.db import models
from django.utils.six import with_metaclass


class UpperCharField(with_metaclass(models.SubfieldBase,models.CharField)):
    def __init__(self,**kwargs):
        self.is_uppercase = kwargs.pop('uppercase',False)
        super(UpperCharField,self).__init__(*args,**kwargs)

    def get_prep_value(self,value):
        value = super(UpperCharField,self).get_prep_value(value)
        if self.is_uppercase:
            return value.upper()

        return value

并像这样使用它:

class MyModel(models.Model):
    razao_social = UpperCharField(max_length=50,uppercase=True)
    # next field will not be upper-cased by default (it's the same as CharField)
    nome_fantasia = UpperCharField(max_length=50)
    # etc..

您还需要通过添加以下代码来解决south migration issues(如有必要):

from south.modelsinspector import add_introspection_rules
add_introspection_rules([
    (
        [UpperCharField],[],{
            "uppercase": ["uppercase",{"default": False}],},),],["^myapp.models.UpperCharField"])

(最后一行中的路径取决于字段类本地化.请阅读南方文档以获取解释.)

虽然使用shell来创建模型对象并将其保存在变量中时有一个小缺点:

my_object = MyModel.objects.create(razao_social='blah')
print my_object.razao_social

你不会得到更高的价值.您需要从数据库中检索对象.当我发现如何解决这个问题时,我会更新这篇文章.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读