我想在标准的Django UserCreationForm中添加更多字段,所以我继续将其子类化在我的应用程序的forms.py文件中,最后得到:
class CustomUserCreationForm(UserCreationForm):
email = forms.EmailField(label = "Email")
first_name = forms.CharField(label = "First name")
last_name = forms.CharField(label = "Last name")
class Meta:
model = User
fields = ("first_name", "last_name", "username",)
def save(self, commit=True):
user = super(CustomUserCreationForm, self).save(commit=False)
user.first_name = first_name
user.last_name = last_name
user.email = self.cleaned_data["email"]
if commit:
user.save()
return user
Run Code Online (Sandbox Code Playgroud)
然后我继续为我的用户创建了一个自定义的ModelAdmin,如下所示:
class CustomUserAdmin(UserAdmin):
add_form = CustomUserCreationForm
inlines = [ProfileInline,]
admin.site.unregister(User)
admin.site.register(User, CustomUserAdmin)
admin.site.register(Class, ClassAdmin)
Run Code Online (Sandbox Code Playgroud)
但是,无论我做什么,当我进入管理页面并尝试添加新用户时,新的CustomUserCreationForm都不会显示.我搞砸了哪里?
编辑:似乎表单没有显示,但正在使用.如果我尝试仅使用典型UserCreationForm具有的用户名和密码字段添加新用户,则会出现错误,当我在ModelAdmin中删除add_form行时,该错误会立即消失.为什么不显示?
我的本地app目录中也没有任何管理员模板.这可能是问题吗?
我希望Django发送电子邮件到用户的电子邮件地址,登录详细信息,一旦管理员将新用户添加到管理站点.所以我尝试使用Django信号,但只是becoz django用户注册是一个两步过程信号得到通知的第一步只有没有电子邮件地址的电子邮件功能(第二步).我的信号代码:
def email_new_user(sender, **kwargs):
if kwargs["created"]: # only for new users
new_user = kwargs["instance"]
send_mail('Subject here', 'Here is the message.', 'from@example.com',['to@example.com'], fail_silently=False)
post_save.connect(email_new_user, sender=User)
Run Code Online (Sandbox Code Playgroud)
所以我试图克服这个问题.我在admin.py中使用此代码
class UserAdmin(admin.ModelAdmin):
list_display = ('username', 'email', 'first_name', 'last_name', 'date_joined', 'last_login')
search_fields = ['username', 'email']
filter_horizontal = ('user_permissions',)
admin.site.unregister(User)
admin.site.register(User, UserAdmin)
Run Code Online (Sandbox Code Playgroud)
这使得所有注册过程都是一个单步过程,我的信号开始工作,并在添加新用户时向user_id发送邮件.但问题出现之后是:
1.用户密码不会转换为哈希值,并且在进入表单时可见,这使得用户无法登录管理站点.
2.Email字段不是强制性的,我想成为强制性的.
请帮我 :(
[编辑]
I tried your code But I m still at same place where i was before posting this question.
the code i used in my admin.py is:
from django.contrib …Run Code Online (Sandbox Code Playgroud) 我有一个扩展/继承AbstractUser的用户模型.我还希望管理员中的用户创建表单匹配,但由于某种原因,我只能让它显示用户名和密码字段.没有其他的.
我发现特别有趣的是,我对admin.py中的这三个字段所做的更改反映在创建表单中,但其他字段从不显示.例如,我可以更改密码1的帮助文本或标签,并在表单中呈现,但其他字段则不会.
此外,如果我设置扩展UserAdmin并注册(如下面的代码所示),我得到一个普通用户的3字段创建视图,但如果我扩展ModelAdmin我得到所有我的字段,但不能使用密码更新形成.它404s.
值得注意的是,进入对象列表的链接是'User',而不是'CommonUser',因为我的模型被调用,但这可能是一个类meta.
admin.py
from django.contrib import admin
from django.contrib.auth.admin import UserAdmin
from django.contrib.auth.forms import UserChangeForm, UserCreationForm
from models import CommonUser, Account, Registry
from django import forms
class MyUserChangeForm(UserChangeForm):
class Meta(UserChangeForm.Meta):
model = CommonUser
class MyUserCreationForm(UserCreationForm):
password = forms.CharField(
label='Password',
max_length = 32,
required=True,
widget=forms.PasswordInput,
)
password2 = forms.CharField(
label='Confirm',
max_length = 32,
required=True,
widget=forms.PasswordInput,
help_text="Make sure they match!",
)
class Meta(UserCreationForm.Meta):
model = CommonUser
fields = ['username', 'password', 'password2', 'email',
'first_name','last_name','address','city','state','zipcode',
'phone1','phone2',]
help_texts = {
'password': 'Must be …Run Code Online (Sandbox Code Playgroud)