如果管理员添加用户,我希望自动确认用户电子邮件。目前,管理员添加用户,然后选择新创建的用户并手动编辑以确认用户电子邮件。我希望每当管理员创建用户时,管理员都会自动执行此过程。
账户/ models.py -
from django.db import models
from django.contrib.auth.models import User
from django.db.models.signals import post_save
from django.dispatch import receiver
from phonenumber_field.modelfields import PhoneNumberField
User._meta.get_field('email').blank = False
User._meta.get_field('email')._unique = True
class Profile(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE, related_name ='profile')
email_confirmed = models.BooleanField(default=False)
phone_number = PhoneNumberField( blank=True, null=True)
organisation = models.CharField(max_length=30, blank=True)
@receiver(post_save, sender=User)
def update_user_profile(sender, instance, created, **kwargs):
if created:
Profile.objects.create(user=instance)
instance.profile.save()
账户/ admin.py
from django.contrib import admin
from django.contrib.auth import admin as upstream
from django.contrib.auth.admin import UserAdmin
from django.contrib.auth.forms import UserCreationForm, UserChangeForm
from django.contrib.auth.models import Group, User
from django.utils.translation import ugettext, ugettext_lazy as _
from django.db.models.signals import post_save
from django.dispatch import receiver
from .models import Profile
class ProfileInline(admin.StackedInline):
model = Profile
can_delete = False
verbose_name_plural = 'Profile'
fk_name = 'user'
class CustomUserAdmin(UserAdmin):
inlines = (ProfileInline, )
list_select_related = ( 'profile', )
list_display = ('email', 'username', 'first_name', 'last_name', 'is_staff')
#exclude = ('username',)
fieldsets = (
('Personal information', {'fields': ('first_name', 'last_name', 'username', 'email', 'password')}),
('Permissions', {'fields': ('is_active', 'is_staff', 'is_superuser', 'groups', 'user_permissions')}),
('Important dates', {'fields': ('last_login', 'date_joined')}),
)
add_fieldsets = (
('None', {
'classes': ('wide',),
'fields': ('username', 'email', 'password1', 'password2')}
),
)
def get_inline_instances(self, request, obj=None):
if not obj:
return list()
return super(CustomUserAdmin, self).get_inline_instances(request, obj)
def get_ordering(self, request):
return ['-date_joined']
def save_model(self, request, obj, form, change):
obj.user = request.user
obj.user.email_confirmed = True
super(CustomUserAdmin, self).save_model(request, obj, form, change)
admin.site.unregister(User)
admin.site.register(User, CustomUserAdmin)
如果用户是由admin创建的,我不知道如何将模型配置文件email_confirmed
更新为True
。如果不是管理员,那么email_confirmed
设置为False
非常感谢任何帮助或建议。提前谢谢。