Python 如何在django_restframework中停止获取重复数据?
我试图通过过滤用户和模式获取所有数据,我可以过滤所有数据,但我也会获取重复数据,所以如何在django rest框架中停止获取重复数据 这里是json文件Python 如何在django_restframework中停止获取重复数据?,python,django-rest-framework,Python,Django Rest Framework,我试图通过过滤用户和模式获取所有数据,我可以过滤所有数据,但我也会获取重复数据,所以如何在django rest框架中停止获取重复数据 这里是json文件 { "count": 4, "next": null, "previous": null, "results": [ { "too": "2019-09-28", "fromm": "2019-09-28", "user":
{
"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
},
这里是视图.py
class ReportView(generics.ListCreateAPIView):
queryset = Delivery.objects.all().distinct()
serializer_class = serializers.ReportSerializer
# pagination_class = CustomPagination
filter_backends = [DjangoFilterBackend]
filterset_class = ReportFilter
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.........
这里是serilizers.py
class ReportView(generics.ListCreateAPIView):
queryset = Delivery.objects.all().distinct()
serializer_class = serializers.ReportSerializer
# pagination_class = CustomPagination
filter_backends = [DjangoFilterBackend]
filterset_class = ReportFilter
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.........
我试图按特定用户和特定模式筛选数据,但我得到了重复数据,所以如何停止获取重复数据我认为数据库中有多行是针对同一用户的。要获得user或任何其他字段的唯一性,必须在
distinct
中传递该参数
对于上述示例,请在ReportView
queryset中为不同的字段添加字段名`
queryset=Delivery.objects.all().distinct('user')
有关的详细信息尝试使用
Delivery.objects.all().distinct('id')
当我将queryset=Delivery.objects.all().distinct('user')放入数据库后端时,出现错误“此数据库后端不支持字段的distinct”?