8

rest-auth が提供するシリアライザーを使用して、定義されたエンドポイント/rest-auth/user/からユーザーの詳細を取得しようとしています (*ヘッダー付き)

(*ヘッダー付き (Content-Type: application/json Authorization: Token 1a5472b2af03fc0e9de31fc0fc6dd81583087523 ))

次のトレースバックを取得しています: https://dpaste.de/oYay#L

私はカスタムユーザーモデルを(ユーザー名ではなく電子メールを使用して)次のように定義しました:

class UserManager(BaseUserManager):
def create_user(self, email, password, **kwargs):
    user = self.model(
        # lower-cases the host name of the email address
        # (everything right of the @) to avoid case clashes
        email=self.normalize_email(email),
        is_active=True,
        **kwargs
    )
    user.set_password(password)
    user.save(using=self._db)
    return user

def create_superuser(self, email, password, **kwargs):
    user = self.model(
        email=email,
        is_staff=True,
        is_superuser=True,
        is_active=True,
        **kwargs
    )
    user.set_password(password)
    user.save(using=self._db)
    return user


class MyUser(AbstractBaseUser, PermissionsMixin):
    USERNAME_FIELD = 'email'

    email = models.EmailField(unique=True)

設定は次のとおりです。

AUTH_USER_MODEL = 'users.MyUser'
ACCOUNT_USER_MODEL_USERNAME_FIELD = None
# Config to make the registration email only
ACCOUNT_EMAIL_REQUIRED = True
ACCOUNT_UNIQUE_EMAIL = True
ACCOUNT_EMAIL_VERIFICATION = 'optional'
ACCOUNT_USERNAME_REQUIRED = False
ACCOUNT_AUTHENTICATION_METHOD = 'email'
EMAIL_BACKEND = 'django.core.mail.backends.console.EmailBackend'

このエラーを修正する方法がわかりません..rest-authシリアライザーに準拠するようにします。

4

1 に答える 1

14

django-rest-auth には、ユーザー モデルのデフォルトのシリアライザーがあります。

    USER_DETAILS_SERIALIZER = 'rest_auth.views.UserDetailsView' 

そして、ここで彼らは連載していますdjango.contrib.auth.User

あなたの場合、カスタム ユーザー モデルを使用していて、モデルにユーザー名フィールドがないため、フィールド ユーザー名をシリアル化しようとするとエラーが発生します。したがって、 User モデルのシリアライザーを作成し、設定にパスを追加する必要があります。

例:

    class CustomUserDetailsSerializer(serializers.ModelSerializer):

        class Meta:
            model = MyUser
            fields = ('email',)
            read_only_fields = ('email',)

settings.py で

    USER_DETAILS_SERIALIZER = CustomUserDetailsSerializer 
于 2015-12-02T09:07:50.940 に答える