Фильтрация данных по связанному объекту в Django Rest Framework - PullRequest
1 голос
/ 16 января 2020

У меня есть следующий ModelSerializers.

Мне нужен дисплей данных statistics по умолчанию в диапазоне 6 дней (см. Поле date в StatisticSerializer). Пользователь может изменить этот диапазон дат (из frontend получить два параметра: start_date и end_date, которых нет в Models и Serializers. Как я могу сделать этот функционал?

сериализаторы

class StatisticSerializer(serializers.ModelSerializer):
    class Meta:
        model = Statistic
        fields = ['date', 'clicks', 'page_views']


class UserStatisticSerializer(serializers.ModelSerializer):
    statistics = StatisticSerializer(many=True)

    class Meta:
        model = User
        fields = [
            'first_name', 'last_name', 'gender', 'ip_address', 'statistics',
        ]

просмотров

class UserStatisticApiView(RetrieveAPIView):
    serializer_class = UserStatisticSerializer
    queryset = User.objects.all()

1 Ответ

3 голосов
/ 17 января 2020

вы можете использовать SerializerMethodField (), документы введите описание ссылки здесь

там просто какой-то псевдокод

class StatisticSerializer(serializers.ModelSerializer):
    class Meta:
        model = Statistic
        fields = ['date', 'clicks', 'page_views']


class UserStatisticSerializer(serializers.ModelSerializer):
    filtered_statistc = serializers.SerializerMethodField()

    class Meta:
        model = User
        fields = [
            'first_name', 'last_name', 'gender', 'ip_address', 'filtered_statistc',
        ]

    def get_filtered_statistc(self,obj):
        result = Statistic.objects.filter('filter there by your params')
        serialized_result = StatisticSerializer(data=result, many=True)
        return serialized_result
...