У меня есть проект django с приложением django-allauth. Мне нужно получить дополнительные данные от пользователя при регистрации. Я столкнулся с аналогичным вопросом здесь, но, к сожалению, никто не ответил на часть настройки профиля.
Согласно предоставленной документацииdjango-allauth
:
ACCOUNT_SIGNUP_FORM_CLASS
(=None
)Строка, указывающая на настраиваемый класс формы (например
‘myapp.forms.SignupForm’
), который используется во время регистрации, чтобы запросить у пользователя дополнительные данные (например, подписку на информационный бюллетень, дату рождения). Этот класс должен реализовать‘save’
метод, принимающий нового зарегистрированного пользователя в качестве единственного параметра.
Я новичок в django и борюсь с этим. Может ли кто-нибудь предоставить пример такого настраиваемого класса формы? Нужно ли мне добавить класс модели , а также со ссылкой на объект пользователя , как это ?
источник
ACCOUNT_SIGNUP_FORM_CLASS
после самого первого входа в социальную сеть для сбора и сохранения пользовательских полей модели? Также использование пользовательской модели путемAUTH_USER_MODEL
изменений из git: github.com/pennersr/django-allauth не загружается в pypi.Используя решение, предложенное pennersr, я получал DeprecationWarning:
Это связано с тем, что с версии 0.15 метод сохранения устарел в пользу метода регистрации def (запрос, пользователь).
Итак, чтобы решить эту проблему, код примера должен быть таким:
источник
signup
вместоsave
.Вот что сработало для меня, объединив несколько других ответов (ни один из них не является на 100% полным и СУХИМ).
В
yourapp/forms.py
:И в
settings.py
:Таким образом, он использует формы модели, так что они СУХИЕ, и использует новые
def signup
. Я пытался поставить,'myproject.myapp.forms.SignupForm'
но это как-то привело к ошибке.источник
@Shreyas: приведенное ниже решение может быть не самым чистым, но оно работает. Пожалуйста, дайте мне знать, если у вас есть предложения по дальнейшему очищению.
Чтобы добавить информацию, которая не принадлежит профилю пользователя по умолчанию, сначала создайте модель в yourapp / models.py. Прочтите общую документацию по django, чтобы узнать об этом больше, но в основном:
Затем создайте форму в yourapp / forms.py:
источник
В вашем
users/forms.py
вы кладете:В settings.py вы помещаете:
Таким образом, вы не нарушите принцип DRY на определение полей множественности моделей пользователей.
источник
Я пробовал много разных руководств, и во всех них чего-то не хватает, повторения ненужного кода или странных вещей, ниже следует мое решение, которое объединяет все варианты, которые я нашел, оно работает, я уже запустил его в производство, НО это все еще не убеждает меня, потому что я ожидал получить first_name и last_name внутри функций, которые я прикрепил к Users, чтобы избежать создания профиля внутри формы, но я не мог, кстати, я думаю, что это поможет вам.
Models.py
Forms.py
Settings.py
источник
create_user_profile
сигнал не работает по дизайну. Во-вторых, вы можете уменьшить это значение до одного сигналаcreated
, особенно при разговоре DRY. И в-третьих, вы выполняете сохранение профиля, вызывая user.save () в вашем представлении, а затем снова сохраняете профиль с фактическими данными.fields = [...]
с квадратными скобками вместоfields = (...)
скобок?exclude
.Вот и все. (:
источник
Создайте модель профиля с пользователем как OneToOneField
источник