13

AbstractUserから継承されたモデルがあります。次のようなものです。

class Driver(AbstractUser):
  dni = models.CharField(max_length=8,validators=[validate_dni],unique=True)
  license = models.CharField(max_length=9,unique=True)
  birthday = models.DateField()
  sex = models.CharField(max_length=1, choices=SEX_CHOICES)
  creation_date = models.DateField(auto_now = True)

これによると:https ://docs.djangoproject.com/en/dev/topics/auth/customizing/

Djangoのユーザーモデルに完全に満足していて、プロファイル情報を追加したいだけの場合は、django.contrib.auth.models.AbstractUserをサブクラス化して、カスタムプロファイルフィールドを追加するだけです。このクラスは、デフォルトのユーザーの完全な実装を抽象モデルとして提供します。

しかし、私の管理者ビューでは、パスワードのフィールドは単純なテキスト入力であり、パスワードは生のテキストとして保存されます。AbstractBaseUserで試すこともできますが、最初にこの問題を明確にする必要があります。私はDjangoから始めているので、少し初心者です。

ありがとう。

4

3 に答える 3

20

実際に独自の関数を定義する必要はありません。UserAdminからのクラスに登録するだけで、すぐに使用できdjango.contrib.auth.adminます。

明示的に、admin.pyファイルに次のものがあることを確認してください。

from django.contrib.auth.admin import UserAdmin
admin.site.register(CustomUserModel, UserAdmin)

モデルに追加のカスタムフィールドがある場合、上記の登録方法では、それらが管理者に表示されなくなります。この場合、次のように、カスタムAdminクラスをクラスから継承させることで機能させることができUserAdminます。

from django.contrib import admin
from django.contrib.auth.admin import UserAdmin

@admin.register(CustomUserModel)
class CustomUserModelAdmin(UserAdmin):
    ...
于 2017-12-21T07:05:34.670 に答える
4

そのパスワードをハッシュする関数を定義する必要があります。直接データベースに保存していただけると思います。

class MyForm(forms.ModelForm):
    ............
    def save(self, commit=True):
        # Save the provided password in hashed format
        user = super(MyForm, self).save(commit=False)
        user.set_password(self.cleaned_data["password"])
        if commit:
            user.save()
        return user
于 2013-03-13T05:30:04.113 に答える
-1

手順djnago>=3.0

models.py

from django.db import models
from django.contrib.auth.models import AbstractUser

    YEAR_IN_SCHOOL_CHOICES = [('1', '1 class'),('2', '2 class'),('3', '3 class'),('4', '4 class'),('5', '5 class'),('6', '6 class'),('7', '7 class'),('8', '8 class'),('9', '9 class'),('10', '10th class'),]
    
    class User(AbstractUser):
        type = models.CharField(max_length=256, choices=(('1','Student'), ('2','Professor'), ('3','lower_staf')), default='1')  
    
    
    class Student(models.Model):
        user = models.OneToOneField(User, on_delete=models.CASCADE, primary_key=True )
        gender = models.BooleanField(choices=((1,'Male'), (2,'Female'), (3,'Trans')), 
    
        def __str__(self):
            return '{}'.format(self.user)

admin.py

from django.contrib import admin
from.models import User, Student
from django.contrib.auth.admin import UserAdmin

class CustomUserAdmin(UserAdmin):

    fieldsets = UserAdmin.fieldsets + ((None, {'fields': ('type',)}),)
    add_fieldsets = UserAdmin.add_fieldsets + ((None, {'fields': ('type',)}),)

class Student_admin(admin.ModelAdmin):
    pass

admin.site.register(User, CustomUserAdmin)
admin.site.register(Student, Student_admin)
于 2021-02-26T07:55:21.910 に答える