Django: проблемы с переходом на пользовательскую модель

Я писал веб-приложение Django, не особо заботясь о своей модели пользователя - предоставленная модель была хорошей, но я понял, что хотел бы иметь возможность ее как-то настроить.

Начать с нуля с настраиваемой пользовательской моделью выглядит довольно просто, но переход на одну модель с сохранением существующих пользователей немного сложнее и доставляет мне много проблем. Я нашел это руководство, в котором используется специальный пакет и есть пошаговые инструкции для моей конкретной ситуации. (Джанго 1.8, Питон 3.4).

Одним из подготовительных шагов является

Вы должны убедиться, что везде в вашем проекте (включая сторонние библиотеки) вы используете AUTH_USER_MODEL и django.contrib.auth.get_user_model(), а не "auth.User" и django.contrib.auth.models.User.

Мой проект не очень сложный - единственные ссылки на модель пользователя находятся в ForeignKeys, а также пара строк, которые получают объекты пользователя.

Где мне использовать django.contrib.auth.get_user_model()? У меня сложилось впечатление, что для ForeignKeys необходимо использовать settings.AUTH_USER_MODEL и любую операцию времени выполнения (например, obj = User.objects.get(<criteria>) установит User с get_user_model(). Это правильно?

В настоящее время у меня есть настройка AUTH_USER_MODEL, например:

AUTH_USER_MODEL = User

в качестве промежуточного шага с импортом django.contrib.auth.models.User вверху settings.py.

Я попытался переключить свои модели, чтобы использовать настройку:

class League(models.Model):
  name = models.CharField(max_length=100)
  users = models.ManyToManyField(settings.AUTH_USER_MODEL)

Однако, когда я запускаю сервер, я продолжаю получать сообщение об ошибке settings.py

    raise ImproperlyConfigured("The SECRET_KEY setting must not be empty.")
django.core.exceptions.ImproperlyConfigured: The SECRET_KEY setting must not be empty.

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


person dkhaupt    schedule 19.02.2016    source источник
comment
Вы не можете импортировать модели внутри настроек. Вот что вызывает странную ошибку секретного ключа. Параметр AUTH_USER_MODEL должен быть строкой, например 'auth.user'.   -  person Alasdair    schedule 19.02.2016
comment
Ах, спасибо! Я попробую это, когда вернусь домой   -  person dkhaupt    schedule 19.02.2016


Ответы (1)


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

AUTH_USER_MODEL = 'auth.User'

В виде строки, без прямого импорта модели. 'auth.User' — это настройка по умолчанию, поэтому, если вы хотите использовать пользователя по умолчанию в своем коде, просто установите его таким образом, и когда вы будете готовы переключить его, измените его на любое имя приложения и модель, поэтому: 'my_app.CustomUser'

Вы получаете ошибку SECRET_KEY, потому что пытаетесь импортировать django.contrib.auth.models.User вверху settings.py., и поэтому он импортирует другие части библиотеки django перед файлом настроек, но настройки файл должен быть загружен первым.

person ben432rew    schedule 19.02.2016
comment
Большое спасибо - я читал эти страницы, но подумал, что просто что-то упустил в отношении get_user_model(). Я все еще очень рано переключаюсь - я действительно пробовал это некоторое время назад и столкнулся с проблемами, поэтому я думаю, что мне нужно обнулить мое предыдущее приложение accounts, чтобы даже следовать указаниям на странице, на которую я ссылался в вопросе. - person dkhaupt; 19.02.2016