0

I am trying to create a POST request to add a user to a database, but I am getting a 500 error with this message: AttributeError: 'QuerySet' object has no attribute '_meta'. Here is my code:

@api_view(['POST'])
def register(request):
    data = request.data

    if data['password'] != data['password_confirm']:
        raise exceptions.APIException('Passwords do not match')

    serializer = UserSerializer(data=data)
    serializer.is_valid(raise_exception=True)
    serializer.save()
    return Response(serializer.data)

UserSerializer:

from rest_framework import serializers

from users.models import User


class UserSerializer(serializers.ModelSerializer):
    class Meta:
        model = User.objects.all()
        fields = ['id', 'first_name', 'last_name', 'email', 'password']
        extra_kwargs = {'password': {'write_only': True}}

User:

from django.db import models


# Create your models here.
class User(models.Model):
    first_name = models.CharField(max_length=63)
    last_name = models.CharField(max_length=63)
    email = models.CharField(max_length=255, unique=True)
    password = models.CharField(max_length=255)

This is the stack trace:

Internal Server Error: /api/register
Traceback (most recent call last):
  File "/home/amicharski/.local/lib/python3.8/site-packages/django/core/handlers/exception.py", line 47, in inner
    response = get_response(request)
  File "/home/amicharski/.local/lib/python3.8/site-packages/django/core/handlers/base.py", line 179, in _get_response
    response = wrapped_callback(request, *callback_args, **callback_kwargs)
  File "/home/amicharski/.local/lib/python3.8/site-packages/django/views/decorators/csrf.py", line 54, in wrapped_view
    return view_func(*args, **kwargs)
  File "/home/amicharski/.local/lib/python3.8/site-packages/django/views/generic/base.py", line 70, in view
    return self.dispatch(request, *args, **kwargs)
  File "/usr/local/lib/python3.8/dist-packages/rest_framework/views.py", line 509, in dispatch
    response = self.handle_exception(exc)
  File "/usr/local/lib/python3.8/dist-packages/rest_framework/views.py", line 469, in handle_exception
    self.raise_uncaught_exception(exc)
  File "/usr/local/lib/python3.8/dist-packages/rest_framework/views.py", line 480, in raise_uncaught_exception
    raise exc
  File "/usr/local/lib/python3.8/dist-packages/rest_framework/views.py", line 506, in dispatch
    response = handler(request, *args, **kwargs)
  File "/usr/local/lib/python3.8/dist-packages/rest_framework/decorators.py", line 50, in handler
    return func(*args, **kwargs)
  File "/home/amicharski/PycharmProjects/admin/users/views.py", line 16, in register
    serializer.is_valid(raise_exception=True)
  File "/usr/local/lib/python3.8/dist-packages/rest_framework/serializers.py", line 220, in is_valid
    self._validated_data = self.run_validation(self.initial_data)
  File "/usr/local/lib/python3.8/dist-packages/rest_framework/serializers.py", line 419, in run_validation
    value = self.to_internal_value(data)
  File "/usr/local/lib/python3.8/dist-packages/rest_framework/serializers.py", line 472, in to_internal_value
    for field in fields:
  File "/usr/local/lib/python3.8/dist-packages/rest_framework/serializers.py", line 355, in _writable_fields
    for field in self.fields.values():
  File "/home/amicharski/.local/lib/python3.8/site-packages/django/utils/functional.py", line 48, in __get__
    res = instance.__dict__[self.name] = self.func(instance)
  File "/usr/local/lib/python3.8/dist-packages/rest_framework/serializers.py", line 349, in fields
    for key, value in self.get_fields().items():
  File "/usr/local/lib/python3.8/dist-packages/rest_framework/serializers.py", line 1028, in get_fields
    info = model_meta.get_field_info(model)
  File "/usr/local/lib/python3.8/dist-packages/rest_framework/utils/model_meta.py", line 35, in get_field_info
    opts = model._meta.concrete_model._meta
AttributeError: 'QuerySet' object has no attribute '_meta'
1

1 Answer 1

1

These are the kinds of errors that take 8 hours to solve but the solution is to change 1 line of code. I just had to shorten User.objects.all() in serializers.py on line 8 just to User, so line 8 is now: model = User.

Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.