Я добавил дополнительное поле для пользователя, выполнив весь процесс создания приложения профиля пользователя и расширения модуля пользователя.
Это не похоже на ошибку.
Что я не могу понять или найти где-либо, так это как показать это новое поле на странице, где администратор создает нового пользователя. Таким образом, под личной информацией, такой как Имя и Фамилия, я хочу, чтобы там было поле Местоположение, которое я добавил в профиль пользователя.
мой профиль:
from django.db import models
from django.contrib.auth.models import User
from django.db.models.signals import post_save
class UserProfile(models.Model):
# This field is required.
user = models.OneToOneField(User)
# Other fields here
location = models.CharField(max_length=20)
# definition of UserProfile from above
# ...
def create_user_profile(sender, instance, created, **kwargs):
if created:
UserProfile.objects.create(user=instance)
post_save.connect(create_user_profile, sender=User)
Также я хотел бы знать, как сделать обязательным адрес электронной почты, например, пароль и имя пользователя. Просто измените модель пользователя в папке Django на:
email = models.EmailField(_('e-mail address'), unique=True)
вообще не работал.
[UPDATE]
Так что это моя шляпа admin.py, которую я создал.
Где я должен включить это в файл settings.py, чтобы он фактически использовал папку с добавленным пользовательским модулем и новой формой?
У меня есть эта строка, но она, кажется, не использует новую форму вообще
AUTH_PROFILE_MODULE = 'UserProfile.UserProfile'
(у меня есть папка с именем UserProfile, которая содержит два фрагмента кода)
from django.contrib import admin
from django.contrib.auth.models import User,Group
from django.contrib.auth.admin import UserAdmin
from django.contrib.auth.forms import UserCreationForm, UserChangeForm
from django import forms
from django.contrib.admin.views.main import *
class MyUserCreationForm(UserCreationForm):
"""
A form that creates a user, with no privileges, from the given username and password.
"""
OFFICES = (
(0, "Global"),
(1, "Dublin"),
(2, "Tokyo"),
(3, "Warsaw"),
(4, "Beijing"),
(5, "Seoul"),
(6, "Taipei"),
(7, "Orem"),
(8, "Mountain View"),
(9, "San Luis Obispo"),
(10, "Roseville"),
(11, "Pune"),
(12, "i18n")
)
username = forms.RegexField(label=_("Username"), max_length=30, regex=r'^[\w.@+-]+$',
help_text = _("Required. 30 characters or fewer. Letters, digits and @/./+/-/_ only."),
error_messages = {'invalid': _("This value may contain only letters, numbers and @/./+/-/_ characters.")})
password1 = forms.CharField(label=_("Password"), widget=forms.PasswordInput)
password2 = forms.CharField(label=_("Password confirmation"), widget=forms.PasswordInput,
help_text = _("Enter the same password as above, for verification."))
location = forms.IntegerField(label=_("Location"), choices=TYPE_CHOICES)
class Meta:
model = User
fields = ("username",)
def clean_username(self):
username = self.cleaned_data["username"]
try:
User.objects.get(username=username)
except User.DoesNotExist:
return username
raise forms.ValidationError(_("A user with that username already exists."))
def clean_password2(self):
password1 = self.cleaned_data.get("password1", "")
password2 = self.cleaned_data["password2"]
if password1 != password2:
raise forms.ValidationError(_("The two password fields didn't match."))
return password2
def save(self, commit=True):
user = super(UserCreationForm, self).save(commit=False)
user.set_password(self.cleaned_data["password1"])
if commit:
user.save()
return user
class CustomUserAdmin(UserAdmin):
add_form = MyUserCreationForm
inlines = [ProfileInline,]
add_fieldsets = (
(None, {
'classes': ('wide',),
'fields': ('username', 'email', 'password1', 'password2', 'location')}
),
)
admin.site.unregister(User)
admin.site.register(User, CustomUserAdmin)
admin.site.register(Class, ClassAdmin)