Как я могу создать наследование таблицы в peewee, когда она еще не была определена?

Как можно создать таблицу, подобную описанной в предоставленном коде? Мой текущий код не работает. Вот мой код:
Изображение к вопросу
  • 11 октября 2023 г. 23:47
Ответы на вопрос 3
Чтобы создать наследование таблицы в peewee, когда она еще не была определена, вы можете использовать атрибут `DeferredForeignKey` вместо обычного атрибута `ForeignKey`.  

Вот пример кода, который показывает, как создать таблицу `Child`, которая наследует поля из таблицы `Parent`:

```python
from peewee import *

database = SqliteDatabase('my_database.db')

class Parent(Model):
    name = CharField()
    age = IntegerField()

    class Meta:
        database = database

class Child(Parent):
    parent = DeferredForeignKey('Parent', null=True)
    school = CharField()

    class Meta:
        database = database

database.connect()
database.create_tables([Parent, Child])
```

Обратите внимание, что мы используем `DeferredForeignKey` для поля `parent` в таблице `Child`. Поскольку `Child` наследует от `Parent`, таблица `Parent` должна быть определена до таблицы `Child`. Поэтому мы можем использовать `DeferredForeignKey`, чтобы указать, что поле `parent` будет ссылаться на таблицу `Parent`, когда она будет создана. 

Когда вы запустите этот код, он создаст две таблицы: `Parent` и `Child`, причем `Child` будет иметь поле `parent`, которое ссылается на записи из таблицы `Parent`.

> Важно также убедиться, что вы открываете и подключаетесь к базе данных `database` перед созданием таблиц с использованием `database.connect()`.
Используйте `DeferredForeignKey` вместо `ForeignKeyField` для обработки проблемы циклической зависимости внешних ключей. В документации описана эта проблема с подробностями: `circular-foreign-key-dependencies`. 
 Подробности о проблеме с циклической зависимостью внешних ключей описаны в документации в разделе `circular-foreign-key-dependencies`. Рекомендуется использовать `DeferredForeignKey` вместо `ForeignKeyField` для решения этой проблемы.
Похожие вопросы