Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Django筛选所有分配的外键_Python_Django_Django Rest Framework_Django Filter - Fatal编程技术网

Python Django筛选所有分配的外键

Python Django筛选所有分配的外键,python,django,django-rest-framework,django-filter,Python,Django,Django Rest Framework,Django Filter,您好,我想问一下如何过滤对象的所有指定外键。我的模型看起来像: class Person(models.Model): name = models.CharField(max_length=250) class VirtualProject(models.Model): project_name = models.CharField(max_length=250) owner = models.ForeignKey(Person) class Hours(model

您好,我想问一下如何过滤对象的所有指定外键。我的模型看起来像:

class Person(models.Model):
    name =  models.CharField(max_length=250)

class VirtualProject(models.Model):
    project_name = models.CharField(max_length=250)
    owner = models.ForeignKey(Person)

class Hours(models.Model):
    hours = models.FloatField()
    assigned_virtual_project = ForeignKey(VirtualProject)
    date = models.DateField()
我正在发送带有owner和dateRange参数的GET请求,我希望筛选分配给该所有者的所有虚拟项目(这没有问题,我可以得到它),还将获取分配给虚拟项目的所有小时对象,并将指定日期范围内的所有小时相加。我怎么能做到?对于前端,我使用React,所以我使用django rest框架。 到目前为止,我的观点是:

class GetDataView(viewsets.ModelViewSet):
    serializer_class = DataSerializer
    
    def get_queryset(self):
       owner = self.request.query_params.get('owner')
       dateRange = self.request.query_params.get('dateRange')

       queryset = VirtualProject.objects.filter(owner=owner)
       return queryset
编辑:

Serializers.py:

class VirtualProjectSerializer(serializers.ModelSerializer):
         class Meta:
             model = VirtualProject
             fields = '__all__'
您只需在序列化程序中使用与总和聚合查询关联的

从django.db.models导入总和
从模型导入时间
类VirtualProjectSerializer(serializers.ModelSerializer):
小时数=序列化程序。SerializerMethodField()
类元:
模型=虚拟项目
字段='\uuuu所有\uuuu'
def get_小时数(自身、obj):
qs=Hours.objects.filter(分配的虚拟项目=obj).aggregate(总和(小时))
返回qs

请注意,这将是只读的,我相信这正是您想要的。

您希望API的响应包含每个
虚拟项目的所有小时数总和。
?或者合计所有
VirtualProject
match queryset的所有小时数?我想根据所有者字段回复每个VirtualProject的所有小时数。您可以在问题中添加DataSerializer代码吗@pipikej@BriseBalloches已更新。在此情况下,我收到的小时数不是从聚合中定义的(总和(小时))。我将其编辑为:Sum('hours')。但当我将
return qs[hours\u sum]
更改为
return qs
时,我收到keyrerror:“hours\u sum”,然后它就开始工作了。它将这个
“hours”:{“hours\u sum”:value},
添加到API中。哦,好吧,也许将[hours\u sum]添加到上面的行是可行的,但我没有尝试。我用你提供的内容编辑我的答案。非常感谢你抽出时间!另外,我想询问是否有任何方法可以将参数从GET请求传递到序列化程序,因为我不想对所有小时进行求和,而只想在发送日期范围时对指定月份的小时进行求和?我试图过滤视图,但效果不太好。非常感谢。