两种情况:
1。)我想定义一个只能取整数0,1或2的属性(val)。
class Trinary(Model):
"""val should accept the values 0, 1 or 2 only"""
val = IntegerField()
2。)我想定义一个只能采用特定字符串的属性(val),例如[" strawberry"," peach",&#34 ;苹果"]
class Fruit(Model):
"""val should accept the values "strawberry", "peach" or "apple" only """
val = ???
是否可以使用peewee实施这样的限制?
感谢您的帮助!
莫夫
答案 0 :(得分:2)
对象IntegerField
等是类,可以是子类(documentation):
类应定义db_value
以从python转换为数据库,
而python_value
用于反过来
class TrinaryField(IntegerField):
def db_value(self, value):
if value not in [0,1,2]:
raise TypeError("Non-trinary digit")
return super().db_field(value) # call
答案 1 :(得分:0)
从peewee 3.0的实际方法Adapt()中,它可以将您的类型值转换为字段类型。
假设我们的用户状态为Enum且带有UserStatus
通过这种方式,我们可以将Enum转换为int并返回
#!/usr/bin/python3
from enum import IntEnum, unique
@unique
class UserStatus(IntEnum):
active = 0
blocked = 1
deleted = 2
class UserStatusField(SmallIntegerField):
def db_value(self, status_enum_field):
"""
Python -> DataBase
:param value: Enum
:return: int
"""
if not isinstance(status_enum_field, UserStatus):
raise TypeError("Wrong type, must be enum")
return super().adapt(status_enum_field.value) # call
def python_value(self, db_val):
"""
DataBase -> Python
:param db_val: int
:return: Enum
"""
return UserStatus(db_val)