您好,我想问一下如何过滤对象的所有已分配外键。我的模型如下所示:
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()
我正在发送带有所有者和日期范围参数的 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__'
只需在序列化程序中使用与总和聚合查询关联的SerializerMethodField
即可。
from django.db.models import Sum
from models import Hours
class VirtualProjectSerializer(serializers.ModelSerializer):
hours = serializers.SerializerMethodField()
class Meta:
model = VirtualProject
fields = '__all__'
def get_hours(self, obj):
qs = Hours.objects.filter(assigned_virtual_project=obj).aggregate(Sum(hours))
return qs
请注意,这将是只读的,我相信无论如何都是您想要的。