1

アプリに新しいユーザーを登録するためのビューを作成しましたが、実行しようとすると次のエラーが発生します。

type object 'User' has no attribute 'objects'

私のコードは次のようになります。

from django.contrib.auth import authenticate, login, logout
from django.contrib.auth.models import User
from django.contrib.auth.decorators import login_required
from django.core import serializers

from rest_framework.views import APIView
from rest_framework.response import Response

from users.serializers import *

class Register(APIView):

    def post(self, request):
        serialized = UserSerializer(data=request.DATA)
        if serialized.is_valid():
            user = User.objects.create_user(serialized.init_data['email'], serialized.init_data['username'], serialized.init_data['password'])
            return Response(serialized.data, status=status.HTTP_201_CREATED)
        else:
            return Response(serialized._errors, status=status.HTTP_400_BAD_REQUEST)

編集: 私の user.serializers モジュールは次のようになります。

from django.forms import widgets
from rest_framework import serializers
from django.contrib.auth import get_user_model

class UserSerializer(serializers.ModelSerializer):
    class Meta:
        model = get_user_model()
        fields = ('date_joined','email','first_name','id','last_login','last_name','username')
4

3 に答える 3

0

serializers モジュールに User という名前のクラスがありますか? from users.serializers import *そのモジュールのすべてを現在の名前空間にインポートし、既にインポートした名前を上書きします。その構文は、まさにその理由から、通常は悪い考えです

于 2014-04-16T12:09:34.420 に答える
0

わかりました、修正しましたが、環境設定の問題からエラーが発生したと思います。それにもかかわらず、私はそれを回避する方法を見つけました。次の行を置き換えました。

user = User.objects.create_user(serialized.init_data['email'], serialized.init_data['username'], serialized.init_data['password'])

と:

user = get_user_model().objects.create_user(serialized.init_data['username'], email=serialized.init_data['email'], password=serialized.init_data['password'])

私も明らかにインポートする必要がありました:

 from django.contrib.auth import get_user_model

User オブジェクトを直接使用できるのではなく、 get_user_model() を使用する必要がある理由がわかりませんが、これで問題は解決しました。

于 2014-04-22T09:39:45.943 に答える