Миграция Django с 2.0 на 2.2 (проблема с правами просмотра)

При переносе проблемы с Django, связанной с миграцией:

python manage.py migrate demo --database demo

Получение ошибки, связанной с:

ValueError: невозможно назначить «ContentType: объект ContentType (1)»: текущий маршрутизатор базы данных предотвращает это отношение.

Detailed Error Log : https://ideone.com/z6NPkq

Проверенная версия Django: после версии Django 2.0.13 возникла эта проблема.

Подскажите, в чем может быть причина этого?

EDIT: нашли причину в Django 2.1, они добавили разрешение на просмотр: Источник

Почему разрешения на просмотр не генерируются автоматически?

Решение: в модуле Django, если мы перейдем к пути к файлу: django/contrib/auth/management/__init.py

Мы должны изменить номер строки: 79

Permission(codename=codename, name=name, content_type=ct)

to

Permission(codename=codename, name=name, content_type_id=ct.id)

Я нашел это решение после отладки внутри Django, но до сих пор не могу понять, почему это происходит. Дайте мне знать другое решение и любую причину этого решения.

EDIT-1: Ищу ответ, чтобы мне не пришлось менять основной модуль Django (библиотеку).

Решение-1:

def allow_relation(self, obj1, obj2, **hints):
    if obj1._state.db == "demo" or obj2._state.db=="demo":
        return True
    return obj1._state.db == obj2._state.db 

Примечание. В моем случае другие базы данных используют таблицы демонстрационной базы данных в качестве ссылки, поэтому для этого в классе Approuter был настроен метод allow_relation.


person Arpit    schedule 30.05.2019    source источник


Ответы (1)


Похоже проблема в роутере. Это должно быть потому, что вы используете Django с конфигурацией нескольких баз данных. Вам необходимо перезаписать функцию allow_relation в маршрутизаторе приложений, чтобы разрешить связь между базами данных, в которых присутствует тип содержимого, и демонстрационной базой данных в соответствии с приведенным выше примером.

person Kjajodia    schedule 14.06.2019
comment
мы можем увидеть переопределение allow_relation? или это только ваши предложения. Благодарность - person Ohad the Lad; 17.06.2019
comment
@OhadtheLad Я добавил решение в раздел вопросов - person Arpit; 17.06.2019