我正在使用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字段仍然是一个不错的选择?
答案 0 :(得分:2)
似乎在保存部分上您丢失了。更改后添加profile.save()
。像这样的东西。
profile.user.is_staff = is_staff
profile.user.is_superuser = is_superuser
profile.save()