Перенос администратора 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
, а затем перенаправить запрос на внешнюю модель с помощью пользовательского менеджера