Исправление django inspectdb после импорта базы данных postgresql sample

Context: Я играю с установкой проекта DRF, используя базу данных postgresql sample, расположенную здесь: Postresql Sample DB

Проблема: База данных примера уже настроена с промежуточными таблицами film_category и film_actor. При использовании manage.py для inspectdb он явно генерирует эти промежуточные таблицы (FilmCategory и FilmActor), и они не служат никакой цели в коде, поскольку содержат только идентификаторы для двух связанных полей. Если бы я создавал их с помощью Django ORM, я мог бы просто объявить:

class Film(models.Model):
    ...
    actors = models.ManyToManyField(Actor, related_name='films')

Django создает эти таблицы "за занавесом", поэтому они не занимают места в моем коде. Я попытался просто установить поле ManyToManyField следующим образом:

actors = models.ManyToManyField(Actor, db_table='film_actor', related_name='films')
categories = models.ManyToManyField(Category, db_table='film_category', related_name='films')

При попытке миграции, однако, это не удается, выдавая следующую ошибку:

psycopg2.errors.DuplicateTable: relation "film_actor" already exists

Я не думаю, что хочу создавать это поле ManyToManyField без явного указания ему, какую db_table использовать, потому что я считаю, что это создаст совершенно новую промежуточную таблицу, и я потеряю доступ ко всем данным, уже хранящимся в этих промежуточных таблицах в исходной базе данных примера.

Я смог заставить его работать без ошибок и ожидаемые операции функционируют нормально, сделав:

actors = models.ManyToManyField(Actor, through='FilmActor', related_name='films')

Но теперь у меня есть явно определенная модель FilmActor и FilmCategory в моем models.py, которую я не могу удалить без возникновения ошибок:

class FilmActor(models.Model):
    actor = models.ForeignKey(Actor, models.CASCADE)
    film = models.ForeignKey(Film, models.CASCADE)
    last_update = models.DateTimeField()
class FilmCategory(models.Model):
    film = models.ForeignKey(Film, models.CASCADE)
    category = models.ForeignKey(Category, models.CASCADE)
    last_update = models.DateTimeField()

Кто-нибудь имел дело с явно определенными промежуточными таблицами, сгенерированными из существующей БД с помощью inspectdb? Есть ли способ избавиться от этих моделей, которые были сгенерированы, и при этом разрешить обычные операции ManyToMany? Технически то, что я хочу сделать, работает, просто мне кажется, что явное объявление этих двух промежуточных таблиц в качестве моделей в моем коде, когда они не имеют никаких дополнительных данных (кроме "last_update"), выглядит некрасиво.

Вернуться на верх