So I am trying to use this
def get_queryset(self, *args, **kwargs):
return OrderItem.objects.filter(order_id=self.kwargs['pk'])
To search my OrderItem by object and return only the ones linked to a specify order by an order_id.
However using the Django debug_toolbar I can see what the sql query is doing and it is doing the following:
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
In this case I passed 2 as the PK in my API endpoint but I don’t understanding why it is searching by the id when I only want it to search by the order_id.
These are my database tables:
enter image description here
enter image description here
Also these are how these two models are defined:
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}"```
And these are the serializers I am and will be using but I am not sure how these would cause this issue:
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’]
I haven't really tired anything else because I cant seem to find anything about this issue online.
john jim is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.