You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 22:55:55