如何在Peewee Model创建实例时自动去除字段空白字符?
在Peewee中自动去除字段空白的实现方法
当然可以实现,下面提供两种实用方案:
方案一:自定义带自动去空白的字段(推荐)
这种方法适合多个模型复用,通过继承CharField实现一个自动处理空白的字段类,所有使用该字段的属性都会自动去除首尾空白:
import peewee as pw class StrippedCharField(pw.CharField): def python_value(self, value): # 处理字段值,去除首尾空白,空值保持原样 if isinstance(value, str): return value.strip() return value class Person(pw.Model): email = StrippedCharField() name = StrippedCharField() # 创建实例时自动去空白 mom = Person(email=" mother@gmail.com ", name=" Stella Bird ") print(mom.email) # 输出: mother@gmail.com print(mom.name) # 输出: Stella Bird
方案二:重写模型的__init__方法
如果只需要给单个模型的特定字段处理空白,可以直接重写模型的初始化方法:
import peewee as pw class Person(pw.Model): email = pw.CharField() name = pw.CharField() def __init__(self, *args, **kwargs): # 先处理指定字段的空白 if 'email' in kwargs: kwargs['email'] = kwargs['email'].strip() if isinstance(kwargs['email'], str) else kwargs['email'] if 'name' in kwargs: kwargs['name'] = kwargs['name'].strip() if isinstance(kwargs['name'], str) else kwargs['name'] # 调用父类的初始化方法 super().__init__(*args, **kwargs) mom = Person(email=" mother@gmail.com ", name=" Stella Bird ") print(mom.email) # 输出: mother@gmail.com print(mom.name) # 输出: Stella Bird
注意:如果需要在保存到数据库前统一处理,也可以使用Peewee的pre_save钩子,但上述两种方法是在创建实例时就完成处理,更符合你的需求。
内容的提问来源于stack exchange,提问作者bicarlsen
相关产品推荐
相关产品推荐

