django admin

时间:2017-08-22 18:15:12

标签: django django-admin

如果管理员添加用户,我希望自动确认用户电子邮件。目前,管理员添加用户,然后选择新创建的用户并手动编辑以确认用户电子邮件。我希望每当管理员创建用户时,管理员都会自动执行此过程。

账户/ 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

非常感谢任何帮助或建议。提前谢谢。

0 个答案:

没有答案