Вложенные сериализаторы и представление данных
Работая над проектом django, я немного застрял на представлении данных через API. На самом деле, при проектировании моделей модель данных довольно прямолинейна: у меня есть отношение один ко многим A--> B поэтому я добавил FK к объекту B.
Объект B имеет булевый атрибут "active".
Я хочу сделать вызов API, чтобы перечислить все объекты A, имеющие хотя бы один связанный с ними объект B с active = true.
Апи может быть таким :
/api/objectA/?investment.active=True
Спасибо за помощь.
Я бы попробовал что-то вроде этого:
class StartUpViewSet(NestedViewSetMixin, ModelViewSet):
model = Startup
#queryset = Startup.objects.all()
serializer_class = StartupSerializer
def get_queryset(self):
Startup.objects.annotate(active_investments=Count('startup_investments', filter=Q(startup_investments__active=True)).filter(active_investments__gt=0)
Здравствуйте, я размещаю этот ответ в надежде, что он поможет другим, так как я потратил два дня, чтобы заставить это работать!!!
class ActiveStartupSerializer(serializers.ListSerializer):
def to_representation(self, data):
"""List all startups with one active investment"""
data = data.filter(startup_investments__active=True)
return super(ActiveStartupSerializer, self).to_representation(data)
class Meta:
model = Startup
fields = ('id', 'header', 'title', 'description', 'tags', 'card_image',
'logo_image', 'main_img', 'startup_investments')
class InvestmentSerializer(serializers.ModelSerializer):
class Meta:
model = Investment
fields = ('id', 'Investment_title', 'collected_amount', 'goal_percentage', 'number_of_investors',
'days_left', 'active')
class StartupSerializer(serializers.ModelSerializer):
startup_investments = InvestmentSerializer(many=True, read_only=True)
class Meta:
model = Startup
list_serializer_class = ActiveStartupSerializer
fields = ('id', 'header', 'title', 'description', 'tags', 'card_image',
'logo_image', 'main_img', 'startup_investments')