Доступ к вложенным идентификаторам в Queryset Django Rest Framework
Как я могу получить доступ к category_id? Я хочу создать список похожих продуктов на основе категории. Поэтому каждый раз, когда я делаю запрос get, например products/1052/similarproducts, я хочу получить все ProductsInStore той же категории, что и ProductInStore(id=1052) и исключить ProductInStore(id=1052), мой текущий код дает мне "ecommerce.models.ProductInStore.DoesNotExist: ProductInStore, соответствующий запросу, не существует." Несмотря на то, что productInStore с номером 1052 существует.
class ProductInStore(models.Model):
product = models.ForeignKey('Product', on_delete=models.CASCADE)
class Product(models.Model):
name = models.CharField(max_length=200)
product_category = models.ManyToManyField(EcommerceProductCategory)
class SimilarProductsListApiView(generics.ListAPIView):
queryset = ProductInStore.objects.all()
serializer_class = ProductInStoreSerializer
#products/954/similarproductsr
def get_queryset(self):
product_id = self.kwargs['pk']
category = ProductInStore.objects.values_list('product__product_category', flat=True).get(product_id=product_id)
return ProductInStore.objects.filter(product__product_category=category).exclude(product_id=product_id).all()
Ваш product_id был id экземпляра ProductInStore, а не экземпляра Product, и поскольку их id, скорее всего, различаются, вы не смогли получить экземпляр
class SimilarProductsListApiView(generics.ListAPIView):
queryset = ProductInStore.objects.all()
serializer_class = ProductInStoreSerializer
def get_queryset(self):
product_in_store_id = self.kwargs['pk']
category = ProductInStore.objects.get(id=product_in_store_id).product.product_category
return ProductInStore.objects.filter(product__product_category=category).exclude(id=product_in_store_id)