首页 > 解决方案 > save() 方法后如何修改 peewee 自定义字段?

问题描述

例如,我有一个模型:

class ExampleModel(Base):
    name = CharField(max_length=255)
    image = ImageField(size=(200, 200))

    class Meta:
        table_name = 'example'

ImageField- 这是我的自定义字段:

class ImageField(TextField):
    thumb_size: Tuple[int, int] = None

    def __init__(self, size: Tuple[int, int] = None, *args, **kwargs):
        super().__init__(*args, **kwargs)
        self.thumb_size = size

    def db_value(self, value):
        # ...some file upload logic

        return json.dumps({
            'original': original_path,
            'thumbnail': thumbnail_path
        })

    def python_value(self, value):
        return json.loads(value)

当我保存实例时,一切都很好(body.image有一个starlette.datastructures.UploadFile类型):

example: ExampleModel = dict_to_model(ExampleModel, body)
example.save()

但是,如果我example.image在保存后检查类型,它仍然有starlette.datastructures.UploadFile类型。保存后如何修改图像字段,或者可能在运行db_value()方法后修改?

标签: pythonpython-3.xpeewee

解决方案


和分别用于读取和写入数据库python_value()db_value()除了将值从一种数据类型转换为另一种之外,它们不是执行任何魔术的地方,并且仅用于为来自数据库游标的值提供 Pythonic 数据类型。

换句话说,你把你的魔法放在了错误的地方。把它放在save()方法中,而不是放在字段类中。


推荐阅读