我对Django的REST全框架有疑问。
当产品被渲染到远程客户端时,每个产品都有一个过滤数据的文件.
例如,模型可能是这样的。
class Product(models.Model):
name = models.CharField()
class Like(models.Model):
product = models.ForeignKey(Product, related_name="likes")
在客户端上,产品的每个赞都以真实值计数,而不是虚假值。
所以我尝试在序列化器中使用下面的代码。
class ProductSerializer(serializers.ModelSerializer):
likes = serializers.PrimaryKeyRelatedField(many=True, queryset=Like.objects.filter(whether_like=True))
class Meta:
model = Product
fields = ('id', 'name', 'likes')
但是,这并不像我想要的那样工作。
我该怎么办?
以下是额外的视图代码。
@api_view(['GET'])
def product_list(request, user_id, format=None):
if request.method == 'GET':
products = Product.objects.all()
serializer = ProductSerializer(products, many=True)
return Response(serializer.data)
2条答案
按热度按时间6l7fqoea1#
不如这样:
LikeSerializer
为简洁起见省略。whlutmcx2#
SerializerMethodField
会给每个对象增加一个额外的数据库查询,而现在(从Django 1.7开始)可以在DRFViewSet
的查询集中使用Prefetch
对象:预取只需要一个查询,确保了与
SerializerMethodField
相比的上级性能。