次のようなモデルがあるとします。
class Car(models.Model):
images = models.ManyToManyField(Image)
class Image(models.Model):
path = models.CharField()
type = models.CharField()
2 つの API ビューを公開したいと考えています。
- 車リスト
- 車の詳細
リスト ビューでは、type="thumbnail" を持つ画像のみを表示したいと考えています。詳細ビューでは、type="image" の画像を表示したいと考えています。
リストは多かれ少なかれ次のようになります。
[{
"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 の例を見てきましたが、リストされているオブジェクトの関連オブジェクトがリストされているのではなく、リストされているオブジェクトをフィルタリングすることしかできないようです。