就像标题一样,我正在尝试设置Tortoise-ORM模型,该模型将包含对应于Postgresql数组列的字段。
看起来要做好这件事,我需要从asyncpg (因为它有完整的数组支持)开始扩展乌龟字段。然而,我只是刚刚开始使用Tortoise,也许还有更好/更容易的方法/已经有人做了类似的事情。
发布于 2021-02-02 18:45:30
您需要实现自己的字段类型。下面是我的实现:
from typing import List, Union, Type, Optional, Any
import json
from tortoise.fields.base import Field
from tortoise.models import Model
class IntArrayField(Field, list):
"""
Int Array field specifically for PostgreSQL.
This field can store list of int values.
"""
SQL_TYPE = "int[]"
def __init__(self, **kwargs):
super().__init__(**kwargs)
def to_db_value(
self, value: List[int], instance: "Union[Type[Model], Model]"
) -> Optional[List[int]]:
return value
def to_python_value(self, value: Any) -> Optional[List[int]]:
if isinstance(value, str):
array = json.loads(value.replace("'", '"'))
return [int(x) for x in array]
return value我没有动态类型字段实现,这并不是很难实现。
在某些情况下,您需要在to_db_value和to_python_value类型转换中加入更多的逻辑。例如,如果您使用的是UUID[]。
https://stackoverflow.com/questions/64161083
复制相似问题