Django model.objects.filter не работает должным образом
Итак, я пытаюсь использовать следующее:
def get_queryset(self, *args, **kwargs):
return OrderItem.objects.filter(order_id=self.kwargs['pk'])
Чтобы выполнить поиск OrderItem
по объектам и вернуть только те, которые связаны с указанным порядком по order_id
.
Однако, используя панель инструментов Django debug_toolbar, я могу видеть, что делает sql-запрос, и он делает следующее:
SELECT "littlelemonAPI_orderitem"."id",
"littlelemonAPI_orderitem"."order_id",
"littlelemonAPI_orderitem"."menuitem_id",
"littlelemonAPI_orderitem"."quantity"
FROM "littlelemonAPI_orderitem"
WHERE ("littlelemonAPI_orderitem"."order_id" = 2 AND "littlelemonAPI_orderitem"."id" = 2)
LIMIT 21
В данном случае я передал 2 в качестве PK в конечной точке API, но я не понимаю, почему он ищет по id
, когда я хочу, чтобы он искал только по order_id
.
Это таблицы моей базы данных:
Также вот как определяются эти две модели:
class Order(models.Model):
user = models.ForeignKey(User, on_delete=models.CASCADE)
delivery_crew = models.ForeignKey(User,on_delete=models.SET_NULL,related_name='delivery_crew',null=True)
status = models.BooleanField(db_index=True, default=0)
total = models.DecimalField(max_digits=6,decimal_places=2)
date = models.DateField(db_index=True,auto_now_add=True)
def __str__(self):
return f"{self.id}"
class OrderItem(models.Model):
order = models.ForeignKey(Order, on_delete=models.CASCADEAlso)
menuitem = models.ForeignKey(MenuItem,on_delete=models.CASCADE)
quantity = models.SmallIntegerField()
class Meta:
unique_together = ('order','menuitem')
def __str__(self):
return f"{self.order_id}"
А вот сериализаторы, которые я использую и буду использовать, но я не уверен, как они могут вызвать эту проблему:
class OrderSerialzier(serializers.ModelSerializer):
user = UserSerializer
class Meta:
model = Order
fields = ['id','user','total','status','delivery_crew','date']
class OrderItemHelperSerialzier(serializers.ModelSerializer):
class Meta:
model = MenuItem
fields = ['title','price']
class OrderItemSerializer(serializers.ModelSerializer):
menuitem = OrderItemHelperSerialzier
class Meta:
model = OrderItem
fields = ['menuitem','quantity']
depth =1
class OrderAddSerializer(serializers.ModelSerializer):
class Meta:
medel =Order
fields = ['delivery_crew']
Я больше ничего не устал, потому что не могу найти ничего об этом вопросе в Интернете.
Я думаю, что в приведенном вами коде нет никаких проблем. SQL-запрос, который вы взяли из панели инструментов, является результатом метода "get", используемого в действии "retrieve" в вашем представлении. Поэтому итоговый набор запросов выглядит следующим образом:
OrderItem.objects.filter(order_id=self.kwargs['pk']).get(pk=<lookup_value>)