Кто-то заходит на страницу и создает UserProfile
с именем пользователя и паролем и т. Д.
UserProfile
не имеет поля имени пользователя или пароля. Так что должно быть кто-то заходит на страницу и создает User
. Затем он создает UserProfile
, связанный с этим вновь созданным User
.
Вопрос в том, как и когда вы хотите создать этот UserProfile
экземпляр?
- Автоматически, при создании нового
User
: используйте сигналы, как описано в документации
- Автоматически при каждом доступе к профилю из пользовательского экземпляра: используйте
AutoOneToOneField
и получите доступ к профилю, используя user.userprofile
вместо user.get_profile()
- вручную. Но не забывайте, что пользователь может не иметь связанных
UserProfile
, поэтому user.get_profile()
может вызвать исключение DoesNotExist
.
Когда они это делают, где создается соответствующий пользователь?
Это не так. Вы должны создать его явно.
Это идея попросить кого-нибудь зарегистрировать учетную запись, а затем создать MyUserProfile с формой, которая запрашивает пароль, имя пользователя, адрес электронной почты и т. Д., А затем, на мой взгляд, создать 2 различных объекта (MyUserProfile и User) с различными частями данных формы. Я имею в виду, что у меня не должно быть формы пользователя, верно?
Почему бы и нет? Вы хотите здесь создать User
и связанный с ним профиль за один раз, верно? В конечном итоге вы можете напрямую использовать данные POST
или Form
для доступа к полям или, что еще лучше, использовать 2 ModelForm
(один для User
, один для UserProfile
), который вы будете обрабатывать в та же точка зрения (может быть этот вопрос может помочь?)
Может быть, есть хороший пример того, как это делается в каком-то проекте с открытым исходным кодом.
Предлагаю вам проверить django-регистрацию и django-profile .
Примечание
У вас есть другой способ добавить информацию к объекту User
, расширяя модель. Это позволит вам поместить ваши дополнительные поля непосредственно в пользовательскую модель и, возможно, будет проще для понимания и использования.
Я не буду вдаваться в подробности, посмотрите этот учебник для получения дополнительной информации.
Другие вопросы
Я пытался использовать AutoOneToOneField из django-раздражает, но я не знаю, где установлены все атрибуты пользователя или как решить, какой объект пользователя присоединить к нему. Этот материал сводит меня с ума
Смотрите выше о том, как его использовать. Если вы чувствуете себя некомфортно, лучше всего следовать документации , в которой рекомендуется использовать ForeignKey
с unique=True
в профилях пользователей.
Кроме того, нужно ли мне использовать приложение сайтов для этого
Из документов Framework сайта : Используйте его, если ваша одиночная установка Django использует более одного сайта, и вам нужно как-то различать эти сайты.
и, наконец, имеет ли «суперпользователь» все разрешения на все (я не хочу, чтобы люди из учетной записи «Акме» имели доступ к объектам «Микрошафт»)?
Опять же, из документов , Обозначает, что у этого пользователя есть все разрешения без явного присвоения им . Это означает, что везде, где Django использует встроенную систему разрешений (например, страницы администрирования по умолчанию), суперпользователь будет авторизован.
В представлениях вы пишете сами, или если вы настроите немного ModelAdmin
, вам решать, как вы собираетесь проверять разрешения.