#python #database #peewee
#python #База данных #чибис
Вопрос:
Я использую peewee в качестве ORM для небольшого проекта. Я хочу определить свои модели как внутренние классы следующим образом:
db = SqliteDatabase("mydatabase.db")
class Outer:
class Human(Model):
id = AutoField()
name = TextField()
class Meta:
database = db
class Pet(Model):
id = AutoField()
owner = ForeignKeyField(Human)
class Meta:
database = db
Это выдает ошибку NameError: name 'Human' is not defined
.
Я также пробовал: owner = ForeignKeyField(self.Human)
и
owner = ForeignKeyField(Outer.Human)
что предсказуемо приводит к name 'self'
и name 'Outer'
не определено.
Можно ли это сделать?
Комментарии:
1.
Human
не находится в глобальной области видимости, поэтому его нельзя найти, если вы не добавите к нему префиксself.
2. Почему вы хотите использовать внутренние классы? Если это для группировки, вместо этого используйте модуль с именем outer
3. Я надеялся инкапсулировать
db
переменную и все модели, которые на нее полагаются. Хотя теперь я вижу, что есть лучшие способы достижения этого (например, использование предложенной модели) Мне все еще интересно узнать, сработает ли этот подход.4. Используйте базовую модель-класс и подкласс.