Перенос администратора django с помощью postgres_fdw

Я использую postgres_fdw для создания связей между моими базами данных Здесь у меня есть внешняя модель с именем:

class User(AbstractUser):
    ...
    class Meta:
        db_table = '"foreign_user"."accounts__user"'
        managed = False

который указывает на эту модель в другом проекте django:

class User(AbstractUser):
    ...
    class Meta:
        db_table = 'accounts__user'
        managed = False

Я действительно запустил python manage.py makemigrations и python manage.py migrate Я получил сообщение об ошибке от администратора django

Применяем admin.0001_initial...Обратная трассировка (последний вызов): ... django.db.utils.Ошибка программирования: указанное отношение "accounts__user" не является таблицей

но когда я запускал миграции с определенными приложениями (только с моим установленным приложением), а миграции администратора не запускались, все работало хорошо, и все отношения с Пользователем были созданы.

Я также убедился, что установил AUTH_USER_MODEL='accounts.User Я уже создал внешних сервера и внешних схемы по мере необходимости Я проверил базу данных, и все таблицы и связи были в порядке

Я выяснил
основная причина в том, что другие пакеты (включая приложение администратора django) используют внешний ключ для пользовательской модели

class LogEntry(models.Model):
    ...
    user = models.ForeignKey(
        settings.AUTH_USER_MODEL,
        models.CASCADE,
        verbose_name=_("user"),
    )

если вы хотите использовать ForeignKey между локальной моделью и внешней моделью, вы должны указать django, чтобы он не применял db ограничение

models.ForeignKey(..., db_constraint=False)

итак, поскольку мы не можем изменить сторонние модели или миграции, лучший подход - использовать фиктивную модель для AUTH_USER_MODEL, а затем перенаправить запрос на внешнюю модель с помощью пользовательского менеджера

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