Аксессор для конфликтов полевых пользователей при переносе с django-social-auth на python-social-auth

Я портирую проект с django-social-auth на python-social-auth. Я выполнил инструкции в документации, но когда я пытаюсь запустить проект, test (./manage.py test) я получаю следующую ошибку:

Creating test database for alias 'default' ...
CommandError: One or more models did not validate:
default.usersocialauth: Accessor for field 'user' clashes with related field 'User.social_auth'. Add a related_name argument to the definition for 'user'.
default.usersocialauth: Reverse query name for field 'user' clashes with related field 'User.social_auth'. Add a related_name argument to the definition for 'user'.

./manage.py syncdb и ./manage migrate работают нормально, как и ожидалось, потому что (как указано в документации) имена таблиц моделей в python-social-auth были определены как совместимые с теми, которые используются в django-social-auth, поэтому перенос данных не требуется.


person DanielS    schedule 22.01.2014    source источник
comment
Есть ли шанс, что обе библиотеки установлены и определены на INSTALLED_APPS?   -  person omab    schedule 23.01.2014
comment
Привет. Спасибо за ответ. Я удалил django-social-auth из INSTALLED_APPS. Вот список приложений, установленных мной сторонними разработчиками: INSTALLED_APPS = ( 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.sites', 'django.contrib.messages', 'django.contrib.sitemaps', 'django.contrib.staticfiles', 'django.contrib.humanize', 'registration', 'suit', 'django.contrib.admin', 'haystack', 'south', 'djcelery', 'django_extensions', 'social.apps.django_app.default', 'sorl.thumbnail', ) Еще раз спасибо.   -  person DanielS    schedule 23.01.2014
comment
Нет. Прошу прощения за непонятность. Я удалил старую библиотеку и установил только python-social-auth ('social.apps.django_app.default'). Проблема все еще не устранена.   -  person DanielS    schedule 25.01.2014
comment
если вы все еще получаете ту же ошибку, это означает, что что-то все еще конфликтует с новой библиотекой. Используйте мой ответ ниже, чтобы определить, что это такое, и удалить его, чтобы разрешить конфликт.   -  person Denis Kanygin    schedule 21.02.2014


Ответы (1)


Попался в ту же проблему.

Несмотря на то, что библиотека django-social-auth была удалена из INSTALLED_APPS, django все еще обнаруживал конфликт, поскольку и django-social-auth, и python-social-auth используют одни и те же внешние ключи с одинаковым параметром related_name.

Чтобы точно знать, с какой моделью конфликтует python-social-auth, установите точку останова в

get_validation_errors (validation.py)

в строке 148 и 150

for r in rel_opts.get_all_related_objects():
    if r.field is not f:
        if r.get_accessor_name() == rel_name:
            e.add(opts, "Accessor for field '%s' clashes with related field '%s.%s'. Add a related_name argument to the definition for '%s'." % (f.name, rel_opts.object_name, r.get_accessor_name(), f.name))
        if r.get_accessor_name() == rel_query_name:
            e.add(opts, "Reverse query name for field '%s' clashes with related field '%s.%s'. Add a related_name argument to the definition for '%s'." % (f.name, rel_opts.object_name, r.get_accessor_name(), f.name))

глядя на переменную 'r', можно увидеть конфликтующий связанный объект.

Полное удаление библиотеки django-social-auth из системы решило проблему.

Поскольку он был изначально установлен с помощью easy_install, я использовал rm -rf, чтобы удалить его из пакетов сайта, но также не забыл удалить имя из easy_install.pth

Вы также можете использовать удаление pip

Надеюсь это поможет.

person Denis Kanygin    schedule 21.02.2014