Допустим, у меня есть общая модель Food
sqlalchemy, которую я хочу повторно использовать в нескольких различных приложениях:
class Food(Base):
_type = Column(Integer, index=True, unique=False, nullable=False)
Атрибут _type
здесь является целым числом. Технически это может быть Enum, но я, когда пишу свою общую модель, не имею доступа к значениям enum (они определяются позже в приложениях). Я попробовал подход Mixin (см. Мой предыдущий вопрос: предоставить Enum во время создания БД ), но мой реальный вариант использования немного сложнее, чем пример Food
. В этой модели определено несколько взаимосвязей, включая ту, которая указывает на модель Food
. Это вынуждает меня, среди прочего, объявлять несколько отношений на уровне приложения, и я действительно не хочу этого делать.
Вместо этого я хотел бы сделать что-то вроде этого:
class FoodType(Enum):
pass
class Food(Base):
_type = Column(Integer, index=True, unique=False, nullable=False)
@hybrid_property
def type(self) -> FoodType:
return FoodType(self._type)
@type.setter
def type(self, food_type):
self._type = food_type.value
и я хотел как-то «заполнить» перечисление FoodType
позже на уровне приложения, но это не представляется возможным. Я пытался переопределить / расширить / подкласс FoodType
, но мои попытки не увенчались успехом.
Есть ли у вас какие-либо предложения?