首页 > 解决方案 > 如何停止在 django_restframework 中获取重复数据?

问题描述

我正在尝试通过过滤用户和模式获取所有数据我能够过滤所有数据但我也得到重复数据所以如何停止在 django rest-framework 中获取重复数据。

这是json 文件

{
    "count": 4,
    "next": null,
    "previous": null,
    "results": [
        {
            "too": "2019-09-28",
            "fromm": "2019-09-28",
            "user": 1,
            "total_milage": 20,
            "total_movingtime": 20.0,
            "total_averagespeed": 10.0,
            "total_kg": 20,
            "total_co2_save": 20,
            "total_boxes": 20,
            "total_user": 20,
            "total_letter": 20,
            "total_ship_weight": 20,
            "total_pack": 20
        },
        {
            "too": "2019-09-28",
            "fromm": "2019-09-28",
            "user": 2,
            "total_milage": 12,
            "total_movingtime": 10.0,
            "total_averagespeed": 10.0,
            "total_kg": 12,
            "total_co2_save": 10,
            "total_boxes": 10,
            "total_user": 10,
            "total_letter": 12,
            "total_ship_weight": 10,
            "total_pack": 10
        },
        {
            "too": "2019-09-28",
            "fromm": "2019-09-28",
            "user": 1,
            "total_milage": 20,
            "total_movingtime": 20.0,
            "total_averagespeed": 10.0,
            "total_kg": 20,
            "total_co2_save": 20,
            "total_boxes": 20,
            "total_user": 20,
            "total_letter": 20,
            "total_ship_weight": 20,
            "total_pack": 20
        },

这是views.py

class ReportView(generics.ListCreateAPIView):
    queryset = Delivery.objects.all().distinct()
    serializer_class = serializers.ReportSerializer
    # pagination_class = CustomPagination
    filter_backends = [DjangoFilterBackend]
    filterset_class = ReportFilter

这是serilizers.py

class ReportSerializer(serializers.ModelSerializer):
    total_milage = serializers.SerializerMethodField()
    total_movingtime = serializers.SerializerMethodField()
    total_averagespeed = serializers.SerializerMethodField()
    total_kg = serializers.SerializerMethodField()
    total_co2_save = serializers.SerializerMethodField()
    total_boxes = serializers.SerializerMethodField()
    total_user = serializers.SerializerMethodField()
    total_letter = serializers.SerializerMethodField()
    total_ship_weight = serializers.SerializerMethodField()
    total_pack = serializers.SerializerMethodField()
    # user = serializers.SerializerMethodField()

    class Meta:
        model = User
        fields = ['too', 'fromm','user', 'total_milage', 'total_movingtime', 'total_averagespeed', 'total_kg', 'total_co2_save',
                  'total_boxes', 'total_user', 'total_letter', 'total_ship_weight', 'total_pack', 'too', 'fromm']


    # def get_mode(self, obj):
    #     totalpiece = Delivery.objects.filter(mode__exact="bike")

    # def get_user(self, obj):
    #     return obj.user.username

    def get_total_letter(self, obj):
        totalpieces = Delivery.objects.filter(user_id=obj.user,mode=obj.mode).aggregate(
            total_letter=Sum('letteritems'))
        return totalpieces["total_letter"]

    def get_total_ship_weight(self, obj):
        totalpieces = Delivery.objects.filter(user_id=obj.user.id,mode=obj.mode).aggregate(
            total_ship_weight=Sum('shipweight'))
        return totalpieces["total_ship_weight"]

// and so on.........

并且我试图按特定用户和特定模式过滤数据,但我得到重复数据,所以如何停止获取重复数据

标签: pythondjango-rest-framework

解决方案


尝试使用Delivery.objects.all().distinct('id')


推荐阅读