Reputation: 516
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
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