私のモデルは次のようになります。
class MenuItem(models.Model):
name = models.CharField(max_length=500)
components = models.ManyToManyField(Component, through=MenuItemComponent)
class Component(models.Model):
name = models.CharField(max_length=500)
class MenuItemComponent(models.Model):
menuItem = models.ForeignKey('MenuItem')
component = models.ForeignKey(Component)
isReplaceable = models.BooleanField()
私がやりたいのは、isReplaceableフィールドを含む特定のMenuItem内のコンポーネント(MenuItemComponentsではない)のリストを公開することです。これまでのところ:
#views.py
class MenuItemComponentList(generics.ListAPIView):
"""
Displays components for given MenuItem
"""
model = MenuItemComponent
serializer_class = MenuItemComponentSerializer
def get_queryset(self):
itemId = self.kwargs['itemId']
return MenuItemComponent.objects.filter(menuItem__pk=itemId)
#serializers.py
class MenuItemComponentSerializer(serializers.HyperlinkedModelSerializer):
class Meta:
model = MenuItemComponent
これにより、MenuItemComponentsのリストが公開され、すべてのコンポーネントを取得するためにクライアントが複数の呼び出しを行うように強制されます。isReplaceableフィールドからの追加データでコンポーネントリストを公開すると、問題が解決します。
編集
最後に、コンポーネント要素をリストするリストを取得したいのですが、要素はMenuItemComponentモデルのisReplaceableフィールドで拡張されています。
{
"count": 2,
"next": null,
"previous": null,
"results": [
{
"url": "http://localhost:8000/api/component/1/",
"name": "component 1",
"isReplaceable": true
},
{
"url": "http://localhost:8000/api/component/2/",
"name": "component 2",
"isReplaceable": false
}
]
}