ホーム>source

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は誕生日が設定されるフォームであり、permissionは上記のフォームです:

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フィールドはまだ良い選択肢ですか?

あなたの答え
  • 前へ java - JPAクエリ:サブクエリをグループ化条件に結合する
  • 次へ Pythonで生成されたMySQL Insert Statementは「重複」を処理するように変換します