【问题标题】:Create Superuser in Django Custom Auth Model在 Django 自定义身份验证模型中创建超级用户
【发布时间】:2020-09-03 20:31:21
【问题描述】:

我想在我的自定义授权用户模型中创建一个超级用户。 这是我的models.py

class User(AbstractUser):
    is_Admin = models.BooleanField(default=False)
    is_HR = models.BooleanField(default=False)
    is_MGR = models.BooleanField(default=False)
    is_EMP = models.BooleanField(default=True)


class Admins(models.Model):

    def __str__(self):
        return self.user.username

    user = models.OneToOneField(User, on_delete=models.CASCADE)
    user.is_admin = True
    first_name = models.CharField(max_length=256)
    last_name = models.CharField(max_length=256)


我希望 Admins 模型能够访问所有用户数据,并访问 Django 管理页面。 以下是我的管理员创建视图 -

class AdminSignUpView(CreateView):
    model = User
    form_class = AdminSignUpForm
    template_name = 'form1/signup_form.html'

    def get_context_data(self, **kwargs):
        kwargs['user_type'] = 'ADMIN'
        return super().get_context_data(**kwargs)
    def form_valid(self, form):
        user = form.save()

        return redirect('/P/login_page/')

管理员的表格是 -

class AdminSignUpForm(UserCreationForm):
    class Meta(UserCreationForm.Meta):
        model = User
    fname = forms.CharField(label = 'First Name', max_length=256)
    lname = forms.CharField(label = 'Last Name', max_length=256)
    @transaction.atomic
    def save(self):
        user = super().save(commit=False)
        user.save()

        user.is_Admin = True
        user.save()
        admin1 = Admins.objects.create(user=user)
        admin1.first_name=(self.cleaned_data.get('fname'))
        admin1.last_name=(self.cleaned_data.get('lname'))
        return user

我已经好几周没弄明白了。我做错了什么吗? 我希望能够使用内置的 Django Auth UI 编辑、创建和删除用户,同时还维护我的自定义 Auth 模型,具有四个不同的层次结构。

【问题讨论】:

    标签: python django django-authentication django-users


    【解决方案1】:

    创建自定义视图以创建管理员

    from django.contrib.auth.models import User
    
    def new(request):
        if request.method == "POST":
                form = RegistrationForm(request.POST)
                if form.is_valid():
                    form.save()
                    user = User.objects.create_user(
                        username=form.cleaned_data['username'],
                        password=form.cleaned_data['password'],
                        email=form.cleaned_data['email'],
                        first_name=form.cleaned_data['first_name'],
                        last_name=form.cleaned_data['last_name'],
                        is_staff=True,
                        is_active=True,
                        is_admin=True,
                    )
                else:
                    print (form.errors)
                    return HttpResponse("Validation Error")
    
                return HttpResponse("Success")
            else:
    
                context = {
                    "form" : form,
                }
                return render(request, 'form.html',context)
    
    

    【讨论】:

    • 我认为我的帖子没有说清楚,所以我有更新以添加更多信息。我尝试了这个解决方案,但遇到了太多障碍。
    猜你喜欢
    • 2021-01-19
    • 2021-01-09
    • 1970-01-01
    • 2013-12-23
    • 1970-01-01
    • 2012-05-06
    • 1970-01-01
    • 2014-10-14
    • 2018-10-22
    相关资源
    最近更新 更多