Ммм… Это перевод. Перед аппрувом подвергся редакторской правке, поэтому это стало не очень заметно (убрали вниз в ссылку в спойлере, в моей первоначальной редакции ссылка на оригинал была первым предложением).
Я сейчас делаю проект на Django, где хотел бы использовать, как и Вы, e-mail в качестве логина. При поиске решений наткнулся на статью, перевод которой решил сделать для Хабра.
Ссылку, которую Вы дали (спасибо! за неё, она мне не попадалась), я посмотрю в понедельник, т.к. сейчас в командировке и есть только мобильный интернет. И отвечу Вам сразу после этого.
На сколько я понимаю, у Вас в проекте может быть приложение (не Ваше, и не одно), которое вообще ничего не знает о Profile, но по каким-то причинам иногда создает/изменяет/удаляет User. Более того, у Вас может быть несколько Profile (например от разных приложений) — в каком из них Вы будете размещать Ваш метод?
Меня смущает Ваш комментарий. По-моему, базовой моделью является User, а (все) Profile – зависимые. Потому что User может существовать без Profile, но не наоборот.
> В чём преимущество использования сигналов перед переопределением метода save?
Если я правильно понял Ваш вопрос, то при переопределении метода save(), Вы будете править исходники Django, а при использовании сигналов — нет.
> Можно ли как-нибудь в самом описании поля указать чтобы связная модель всегда создавалась?
Вот тут в официальной документации прямо сказано, что нет, и предлагается использовать сигналы для этого.
they do not get auto created when a user is created, but a django.db.models.signals.post_save could be used to create or update related models as appropriate
you should reference the User model with the AUTH_USER_MODEL setting in code that is executed at import time. get_user_model() only works once Django has imported all models.
пишет, что «Это означает, что для определения моделей, регистрации сигналов, создания миграций и т.д., get_user_model () не работает.»
Должно быть младше же?
Я сейчас делаю проект на Django, где хотел бы использовать, как и Вы, e-mail в качестве логина. При поиске решений наткнулся на статью, перевод которой решил сделать для Хабра.
Ссылку, которую Вы дали (спасибо! за неё, она мне не попадалась), я посмотрю в понедельник, т.к. сейчас в командировке и есть только мобильный интернет. И отвечу Вам сразу после этого.
Profile
, но по каким-то причинам иногда создает/изменяет/удаляетUser
. Более того, у Вас может быть несколькоProfile
(например от разных приложений) — в каком из них Вы будете размещать Ваш метод?Меня смущает Ваш комментарий. По-моему, базовой моделью является
User
, а (все)Profile
– зависимые. Потому чтоUser
может существовать безProfile
, но не наоборот.Если я правильно понял Ваш вопрос, то при переопределении метода
save()
, Вы будете править исходники Django, а при использовании сигналов — нет.> Можно ли как-нибудь в самом описании поля указать чтобы связная модель всегда создавалась?
Вот тут в официальной документации прямо сказано, что нет, и предлагается использовать сигналы для этого.
Автор пишет, что никогда не задумывался над этим, просто в таком виде изучил это в прошлом. И соглашается, что лучше это переписать:
> необходимо напомнить о существовании метода django.contrib.auth.get_user_model()
Тут автор, ссылаясь на последний абзац документации Django: пишет, что «Это означает, что для определения моделей, регистрации сигналов, создания миграций и т.д., get_user_model () не работает.»
Я переадресовал Ваш вопрос и замечание автору. Как только он ответит, я напишу сюда)