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)