"Cannot query 'admin': Must be 'User' instance"
I’m working on a Django REST Framework project where I have a Cart model, and I want to allow authenticated users to add items to their cart via a POST request. However, I keep getting the following error:
ValueError: Cannot query "admin": Must be "User" instance.
Here’s the relevant part of my Cart model:
class Cart(models.Model):
user = models.ForeignKey(User, on_delete=models.CASCADE, related_name='carts')
album = models.ForeignKey(Album, on_delete=models.CASCADE)
quantity = models.PositiveIntegerField(default=1)
added_at = models.DateTimeField(default=timezone.now)
And here’s the CartView where the issue occurs:
class CartView(APIView):
permission_classes = [IsAuthenticated]
def post(self, request):
user = User.objects.get(id=request.user.id) # Force correct User instance
album_id = request.data.get('album_id')
if not album_id:
return Response({"error": "Album ID is required"}, status=400)
try:
album = Album.objects.get(id=album_id)
except Album.DoesNotExist:
return Response({"error": "Album does not exist"}, status=404)
cart_item, created = Cart.objects.get_or_create(user=user, album=album)
if not created:
cart_item.quantity += 1
cart_item.save()
return Response({"message": f"Added {album.title} to cart", "quantity": cart_item.quantity}, status=201)
In Postman, I include the Authorization header with a valid token:
Authorization: Token fcbb7230bb0595694200e3e6effbe67d1c43fb7c
- Ensured
request.user
is properly authenticated. - Verified that the token belongs to the correct user in the admin panel.
- Logged
type(request.user)
and found it’s not always an instance ofUser
. - Explicitly retrieved the
User
instance usingUser.objects.get(id=request.user.id)
.