Django REST Framework ValueError: Невозможно выполнить запрос "Джон Смит": Должен быть экземпляр "User"

Я работаю над проектом Django с Django REST Framework, и я столкнулся с ошибкой ValueError при попытке отфильтровать заказы по ID клиента. Вот трассировка ошибки:

Вот соответствующий фрагмент кода из файла views.py:

class OrderViewSet(ModelViewSet):
    queryset = Order.objects.all()
    serializer_class = OrderSerializer
    permission_classes = [IsAuthenticated]

    def get_queryset(self):
        customer_id = self.request.user.id
        return Order.objects.filter(customer_id=customer_id)

Модели (models.py):

from django.db import models
from django.conf import settings

class Customer(models.Model):
    phone = models.CharField(max_length=255)
    user = models.OneToOneField(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)

class Order(models.Model):
    placed_at = models.DateTimeField(auto_now_add=True)
    payment_status = models.CharField(max_length=1, choices=[('P', 'Pending'), ('C', 'Complete'), ('F', 'Failed')], default='P')
    customer = models.ForeignKey(Customer, on_delete=models.PROTECT)
    tickets = models.ManyToManyField('Ticket', through='OrderItem')

Кажется, что поле customer в модели Order ссылается на модель Customer, но ошибка говорит о том, что ожидается экземпляр User.

Вопрос: Как решить эту ошибку, чтобы правильно фильтровать заказы по вошедшему пользователю?

Фильтрация действительно неправильная, вы можете фильтровать с помощью:

class OrderViewSet(ModelViewSet):
    queryset = Order.objects.all()
    serializer_class = OrderSerializer
    permission_classes = [IsAuthenticated]

    def get_queryset(self):
        return Order.objects.filter(customer__user=request.user)
Вернуться на верх