8

Django 1.5 で Web アプリケーションを構築しています。カスタム UserManager でカスタム User モデルを使用しています。Django の公式ドキュメントの手順と例に従いました。

今、新しいユーザーを作成しようとすると UserManager.create_user(...) 、NoneType エラーが発生します: UserManager の属性モデルのタイプが None のようです。User モデルで UserManager を正しく設定していると思います ( objects = UserManager() )

どこを間違えているのか本当にわかりません。コーディング パートナーのブースに参加します。私は Django を初めて使用します。多分あなたは私たちを助けることができます。

コードは次のとおりです。

class UserManager(BaseUserManager):
"""
    create a new user

    @param username:  the name for the new user
    @param password:  the password for the new user. if none is provided a random password is generated
    @param person:    the corresponding person object for this user
"""
def create_user(self, username, person, password=None):
    if not username:
        raise ValueError('User must have a valid username')

    user = self.model(username=username, created=datetime.now(), must_change_password=True, deleted=False, person=person)

    user.set_password(password)
    user.save(using=self._db)
    return user

class User(AbstractBaseUser):
    ## the id of the user. unique through the application
    user_id     =   models.AutoField(primary_key=True)
    ## the name of the user. unique through the application
    username    =   models.CharField(max_length=32, unique=True)
    ## the date when the user was created
    created     =   models.DateTimeField()
    ## iff this is true the user must set a new password at next login
    must_change_password    =   models.BooleanField(default=True)
    ## iff true the user is marked as deleted and can not login
    deleted     =   models.BooleanField(default=False)
    ## iff true the user is admin and has all permissions. use with care!
    is_admin = models.BooleanField(default=False)
    ## reference to the person entity that is linked to this specific user
    person      =   models.ForeignKey(Person)
    ## indicates if the user is active or not
    active    =    models.BooleanField(default=True)

    ## define the user manager class for User
    objects     =   UserManager()

    # necessary to use the django authentication framework: this field is used as username
    USERNAME_FIELD  =   'username'

user = self.model(..)UserManager の create_user() メソッドの行で NoneType エラーが発生しています

4

5 に答える 5

9

カスタムユーザーモデルの保存にも問題があり、それを理解するのに時間がかかりました

あなたのコードの重要な行は次のとおりだと思います。

objects     =   UserManager()

User クラス内で、新しいユーザーを保存するには、呼び出す必要があります

new_user=User.objects.create_user(args, args, args, etc)

objects」はクラスを呼び出すアイテムでありUserManager、マネージャーと呼ばれますdjango

于 2014-05-19T18:44:00.807 に答える
8

新しいユーザーを作成するには、 を呼び出すべきではありませんUserManager.create_user(...)。代わりに、次を使用する必要があります。

from django.contrib.auth import get_user_model
get_user_model().objects.create_user(...)

これが django マネージャーの仕組みです。ここでドキュメントを読むことができます

于 2013-05-17T10:08:14.413 に答える
2

コメントするのに十分な担当者がいないため、回答を追加する必要がありました。しかし、@ Aldarundの回答のリンクには、 get_user_model() の使用についてはまったく説明されていません。ただし、このリンクは役立つはずです...

于 2013-09-27T07:29:35.703 に答える