Я не уверен, была ли проблема связана с определенным порядком строк в классе NewUserAdmin или чем-то еще - еще не проверила его, но я уверен, что был близок к этому решению гораздо раньше. то, о чем я говорил (работает t он способ, которым я хотел это :)). Теперь я могу легко добавить любое поле в модель пользователя, и оно все еще связано со всеми функциями фреймворка, такими как управление сеансами и т. Д. Более того, я не использую поле AbstractBaseUser и OneToOne, что вызвало массу проблем. В любом случае - спасибо за любой способ помощи. Я бы не разрешил это без вас ... ... на этой неделе: D
PS Я пропустил весь импорт. IDE расскажет вам, что нужно.
models.py
class NewUserManager(UserManager):
def create_user(self, username, email=None, password=None, **extra_fields):
return UserManager.create_user(self, username, email=email, password=password, **extra_fields)
def create_superuser(self, username, email, password, **extra_fields):
return UserManager.create_superuser(self, username, email, password, **extra_fields)
class NewUser(AbstractUser):
newField = models.CharField() # for example CharField
newField = models.CharField(max_length = 12) # important thing - properties should be in the second line
objects = NewUserManager()
class Meta(AbstractUser.Meta):
swappable = 'your_app_name.NewUser'
#db_table = 'auth_user'
forms.py
class NewUserCreationForm(forms.ModelForm):
password1 = forms.CharField(label='Password', widget=forms.PasswordInput)
password2 = forms.CharField(label='Password confirmation', widget=forms.PasswordInput)
class Meta:
model = NewUser
fields = ('username', 'email', 'first_name', 'last_name', 'newField') # few example fields and new one: newField
def clean_password2(self):
password1 = self.cleaned_data.get("password1")
password2 = self.cleaned_data.get("password2")
if password1 and password2 and password1 != password2:
raise forms.ValidationError("Passwords don't match")
return password2
def save(self, commit=True):
user = super(NewUserCreationForm, self).save(commit=False)
user.set_password(self.cleaned_data["password1"])
if commit:
user.save()
return user
class NewUserChangeForm(UserChangeForm):
class Meta(UserChangeForm.Meta):
model = NewUser
fields = ('username', 'email', 'first_name', 'last_name', 'newField', 'last_login', 'is_staff') # few example fields and new one: newField
admin.py
class NewUserAdmin(UserAdmin):
form = NewUserChangeForm
add_form = NewUserCreationForm
list_display = ('username', 'newField', 'first_name', 'last_name', 'last_login',) # few example fields and new one: newField
fieldsets = (
(None, {'fields': ('username', 'email', 'first_name', 'last_name', 'newField', 'last_login', 'is_staff')}), # few example fields and new one: newField
)
add_fieldsets = (
(None, {
'classes': ('wide',),
'fields': ('username', 'newField', 'password1', 'password2')} # here are fields you want to have in django-admin AddUser view
), # one of the most important place above
)
admin.site.register(NewUser, NewUserAdmin)
Документах дают пример очень углубленный пользовательской модели пользователя, в том числе custom 'UserCreationForm' https://docs.djangoproject.com/en/1.7/topics/auth/customizing/#a-full-example – Ngenator
Я подал заявку на django- docs, поэтому, если он не был достаточно ясным - я тоже пробовал эти решения. Кажется, проблема здесь связана с линией: add_form = UserCreationForm. Похоже, нет никаких последствий этого, и я не могу понять, почему. Во-вторых: использование AbstractBaseUser вместо AbstractUser генерирует весь новый набор ошибок. – wisienka91
Ну, на ваш вопрос ответили тогда, вот и все. Если у вас возникли проблемы с тем, как вы его реализовали, нет ничего, что можно было бы сделать, не видя ваш код. – Ngenator