在 Django Rest Framework 中列出 objects 字段而不是 Object
Listing objects field instead of Object in Django Rest Framework
我有一个模型
class Like(models.Model):
product = models.ForeignKey('ProductInStore', on_delete=models.PROTECT)
user = models.ForeignKey('users.CustomUser', on_delete=models.PROTECT)
class Meta:
unique_together = ('product', 'user',)
和一个序列化程序
class LikeSerializer(serializers.ModelSerializer):
user = serializers.PrimaryKeyRelatedField(read_only=True, default=serializers.CurrentUserDefault())
product = serializers.PrimaryKeyRelatedField(read_only=True)
class Meta:
model = Like
fields = ('user', 'product',)
class UserLikedProductsApiList(generics.ListAPIView):
queryset = Like.objects.all()
serializer_class = LikeSerializer
因此,如果有人喜欢某个产品,将其添加到收藏夹,它会在数据库中创建一个赞 object。我想创建一个端点 users/me/likedProducts,以便我可以列出 self.user.request 喜欢的所有产品。意思是所有 Like 实例,而不是 Like 实例,我只想显示 Like.product 个实例。假设一个人 x 喜欢 4 个项目,我只想在该列表中显示 4 个项目。您知道如何在 Django Rest Framework 中解决这个问题吗?
您可以将查询集从 like
模型更改为 ProductInStore 模型
查询看起来像这样:
ProductInStore.objects.filter(id__in=Like.objects.filter(user=self.request.user).values_list('product',flat_true))
你可以使用默认的产品序列化器
我有一个模型
class Like(models.Model):
product = models.ForeignKey('ProductInStore', on_delete=models.PROTECT)
user = models.ForeignKey('users.CustomUser', on_delete=models.PROTECT)
class Meta:
unique_together = ('product', 'user',)
和一个序列化程序
class LikeSerializer(serializers.ModelSerializer):
user = serializers.PrimaryKeyRelatedField(read_only=True, default=serializers.CurrentUserDefault())
product = serializers.PrimaryKeyRelatedField(read_only=True)
class Meta:
model = Like
fields = ('user', 'product',)
class UserLikedProductsApiList(generics.ListAPIView):
queryset = Like.objects.all()
serializer_class = LikeSerializer
因此,如果有人喜欢某个产品,将其添加到收藏夹,它会在数据库中创建一个赞 object。我想创建一个端点 users/me/likedProducts,以便我可以列出 self.user.request 喜欢的所有产品。意思是所有 Like 实例,而不是 Like 实例,我只想显示 Like.product 个实例。假设一个人 x 喜欢 4 个项目,我只想在该列表中显示 4 个项目。您知道如何在 Django Rest Framework 中解决这个问题吗?
您可以将查询集从 like
模型更改为 ProductInStore 模型
查询看起来像这样:
ProductInStore.objects.filter(id__in=Like.objects.filter(user=self.request.user).values_list('product',flat_true))
你可以使用默认的产品序列化器