【问题标题】:AssertionError: `create()` did not return an object instanceAssertionError:`create()` 没有返回对象实例
【发布时间】:2021-04-28 02:03:18
【问题描述】:

我在向 UserRegisterView 发送请求时收到以下错误:

  File "/Users/MichaelAjanaku/Desktop/test/afrocode/lib/python3.6/site-packages/rest_framework/views.py", line 506, in dispatch
    response = handler(request, *args, **kwargs)
  File "/Users/MichaelAjanaku/Desktop/test/leave/views.py", line 22, in post
    serializer.save()
  File "/Users/MichaelAjanaku/Desktop/test/afrocode/lib/python3.6/site-packages/rest_framework/serializers.py", line 207, in save
    '`create()` did not return an object instance.'
AssertionError: `create()` did not return an object instance.

我不知道为什么会这样。这是我的views.py:

class UserRegistrationView(CreateAPIView):
    serializer_class = UserRegistrationSerializer
    permission_classes = (AllowAny,)

    def post(self, request):
        serializer = self.serializer_class(data= request.data)
        serializer.is_valid(raise_exception=True)
        serializer.save()
        status_code = status.HTTP_201_CREATED
        response = {
            'success' : 'True',
            'status code' : status_code,
            'message' : 'User registered successfully'
        }

和序列化程序:

class UserRegistrationSerializer(serializers.ModelSerializer):

    profile = UserSerializer(required=False)
    class Meta:
        model = User
        fields = ('email', 'password','profile' )
        extra_kwargs = {'password': {'write_only' : True}}

    
    def create(self, validated_data):
        profile_data = validated_data.pop('profile')
        user = User.objects.create_user(**validated_data)
        UserProfile.objects.create(
            user = user,
            first_name = profile_data['first_name'],
            last_name= profile_data['last_name'],
                     )

请问是什么原因导致的错误?谢谢

【问题讨论】:

    标签: python django django-rest-framework


    【解决方案1】:

    您的 create 方法未返回对象实例。您应该返回User.objects.create(...) 调用的结果。

    def create(self, validated_data):
        profile_data = validated_data.pop('profile')
        user = User.objects.create_user(**validated_data)
        UserProfile.objects.create(
            user = user,
            first_name = profile_data['first_name'],
            last_name= profile_data['last_name'],
                     )
        return user
    

    【讨论】:

      【解决方案2】:

      您没有在创建方法中返回用户。

      类 UserManager(BaseUserManager):

      def create_user(self, username, email, password=None):
          if username is None:
              raise TypeError('User should have a username')
          if email is None:
              raise TypeError('User should have an email')
      
          user = self.model(username=username, email=self.normalize_email(email))
          user.set_password(password)
          user.save()
          return user
      

      【讨论】:

        【解决方案3】:

        我也有同样的错误。 在您的 serializer.py 中: 在顶部添加:

        from django.contrib.auth import get_user_model
        User = get_user_model()
        

        这对我有用,因为我使用的是自定义用户。

        【讨论】:

          猜你喜欢
          • 2019-08-09
          • 2022-08-02
          • 2021-09-01
          • 1970-01-01
          • 2023-04-07
          • 1970-01-01
          • 1970-01-01
          • 2020-06-02
          • 1970-01-01
          相关资源
          最近更新 更多