Вложенные сериализаторы и представление данных

Работая над проектом 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')
Вернуться на верх