假设我有一个这样的模型:
请注意,不同的图像ID会根据视图显示。
到目前为止,我的序列化器看起来是这样的:
当然,这会给我所有列表中的图像以及详细信息,并迫使客户端进行额外的调用以获取应显示的图像类型。
有没有通用的方法来解决这个问题?我已经看过django-filter的例子了,但似乎只能过滤哪些对象被列出,而不能过滤列出对象中的相关对象。
class Car(models.Model):
images = models.ManyToManyField(Image)
class Image(models.Model):
path = models.CharField()
type = models.CharField()
我希望暴露两个API视图:
- 汽车列表
- 汽车详细信息
在列表视图中,我只想显示类型为“缩略图”的图像。 在详细视图中,我想显示类型为“图像”的图像。
以下大致是列表应该看起来的样子:
[{
"id": 1,
"images": [1, 2],
},
{
"id": 2,
"images": [3, 4],
}]
以及详细信息视图:
{
"id": 1,
"images": [5],
}
请注意,不同的图像ID会根据视图显示。
到目前为止,我的序列化器看起来是这样的:
class CarSerializer(serializers.ModelSerializer):
images = serializers.ManyPrimaryKeyRelatedField()
class Meta:
model = Car
列表 API 视图:
class CarList(generics.ListAPIView):
model = Car
serializer_class = CarSerializer
详情API视图:
class CarDetails(generics.RetrieveAPIView):
model = Car
serializer_class = CarSerializer
当然,这会给我所有列表中的图像以及详细信息,并迫使客户端进行额外的调用以获取应显示的图像类型。
有没有通用的方法来解决这个问题?我已经看过django-filter的例子了,但似乎只能过滤哪些对象被列出,而不能过滤列出对象中的相关对象。