Rahul Raj
Rahul Raj

Reputation: 516

How to stop getting duplicate data in django_restframework?

I am trying to get all data by filter user and mode i am able to filter all data but i also getting duplicate data so how to stop getting duplicate data in django rest-framework.

Here is json file.

{
    "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
        },

Here is views.py

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

and here is 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.........

And i a trying to filter data by specific user and specific mode but i geting repeating data so how to stop getting repeating data

Upvotes: 4

Views: 2730

Answers (2)

Siddharth Rakholiya
Siddharth Rakholiya

Reputation: 11

try to use Delivery.objects.all().distinct('id')

Upvotes: 1

Ravi Kumar
Ravi Kumar

Reputation: 1797

I think you have multiple rows in database for same user. to get unique with user or any other field you have to pass that argument in distinct.

For above example In ReportView queryset add field names for distinct`

queryset = Delivery.objects.all().distinct('user')

More about distict queryset

Upvotes: 0

Related Questions