Mon modèle ressemble à ceci:Comment étendre le modèle au niveau sérialiseur avec django-repos-cadre
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()
Ce que je voudrais faire est d'exposer une liste de composants (non MenuItemComponents) dans ligneMenu étant donné que inclurait le champ isReplaceable. Jusqu'à présent, j'ai:
#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
qui expose une liste des clients et MenuItemComponents des forces pour faire plusieurs appels afin de récupérer tous les composants. L'exposition de la liste des composants avec des données supplémentaires provenant du champ isReplaceable résoudrait le problème.
EDIT
En fin de compte, je voudrais obtenir une liste qui répertorie les éléments constitutifs mais les éléments sont exteded avec le champ isReplaceable du modèle MenuItemComponent:
{
"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
}
]
}
Pourriez-vous donner un exemple de ce à quoi vous voulez que la représentation finale ressemble? –