moim modelu wygląda następująco:Jak przedłużyć modelu na poziomie serializer z django-Rest-ram
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()
Co chciałbym zrobić to narazić listę Components (nie MenuItemComponents) w danym MenuItem że będzie zawierać pole isReplaceable. Do tej pory mam:
#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
co naraża listę MenuItemComponents i zmusza klientów do dokonywania wielu połączeń w celu pobrania wszystkich składników. Ujawnienie listy komponentów z dodatkowymi danymi z pola isReplaceable rozwiązałoby problem.
EDIT
W końcu chciałbym uzyskać listę z listą elementów składowych ale elementy są exteded z pola isReplaceable z MenuItemComponent modelu
{
"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
}
]
}
Czy możesz podać przykład tego, jak chcesz wyglądać? –