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

1

如果您在任何情况下都在制作 aCustomUser和 aCustomAccountManager

class CustomAccountManager(BaseUserManager):
     ......
     .....
     ...
class CustomUser(AbstractBaseUser, PermissionsMixin):
     ......

      # make sure it is [objects] and not [object]

      objects = CustomAccountManager()

     ....
     ...

于 2020-10-15T06:34:28.260 回答
0

您的序列化程序模块中有一个名为 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

我还没有弄清楚为什么我需要使用 get_user_model() 而不仅仅是能够直接使用我的 User 对象,但这解决了我的问题。

于 2014-04-22T09:39:45.943 回答