django将用户注册为超级用户

时间:2018-08-20 11:29:47

标签: django user-permissions

我正在使用OneToOne关系来创建这样的自定义用户:

class Patient(models.Model):
    user = models.OneToOneField(Django_User, on_delete=models.CASCADE)
    models.PositiveSmallIntegerField(choices=USER_TYPE_CHOICES)
    birthday=models.DateField(auto_now=False, null=True, blank=True)
    USERNAME_FIELD='username'

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

    def save(self, *args, **kwargs):
        super(Patient, self).save(*args, **kwargs)

    def set_birthday(self, birthday):
        birthday = self.birthday

现在我的任务有了一些补充,我需要给每个用户is_staff或is_superuser权限。 我创建了一个表单:

class UserPermissionForm(forms.Form):
permission = [(1, 'Patient'),
(2, 'Lieferant'),
(3, 'Andere'),
(4, 'Mitarbeiter'),
(5, 'Admin')]
Zugriffsrechte = forms.ChoiceField(choices= permission, widget=forms.Select())

并尝试在我的视图中设置权限-genericform只是通常的django用户创建表单,form是设置生日的表单,权限是上面显示的表单:

def register_user_view(request):
    title="Register User"
    genericform = GenericCreationForm(request.POST or None)
    form=UserRegisterForm(request.POST or None)
    permission = UserPermissionForm(request.POST or None)
    if form.is_valid() * genericform.is_valid() * permission.is_valid():
        genericform.save()
        username = genericform.cleaned_data.get('username')
        raw_password = genericform.cleaned_data.get('password1')
        user_type = int(request.POST.get('Zugriffsrechte'))
        new_user = authenticate(username=username, password=raw_password)
        profile = form.save(commit=False)
        profile.user = new_user
        profile.save()
        is_superuser = False
        is_staff = False
        if user_type > 3:
            is_staff = True
            print('YOU SHALL BE STAFF')
        if user_type > 4:
            is_superuser = True
            print('YOU SHALL BE ADMIN')
        profile.user.is_staff = is_staff
        profile.user.is_superuser = is_superuser
        login(request,profile.user)
        return redirect("/register/done")
    context={
        "form":form,
        "genericform":genericform,
        "permissionform": permission,
        "title":title,
    }
    return render(request,"profile_form.html",context)

我的第一个问题是,是否以及如何设置is_staff或is_superuser。上面的代码没有错误,但是创建的用户仍然只是普通用户。 我也知道这很简单(我正在与其他人一起工作,因此在某些时候一切都变得有些非结构化),所以问题2是:使此代码更好的最佳方法是什么?具有自定义用户管理器的自定义用户?还是OneToOne字段仍然是一个不错的选择?

1 个答案:

答案 0 :(得分:2)

似乎在保存部分上您丢失了。更改后添加profile.save()。像这样的东西。

profile.user.is_staff = is_staff
profile.user.is_superuser = is_superuser
profile.save()