python - Django过滤所有分配的外键
问题描述
您好我想问一下如何过滤对象的所有分配的ForeignKeys。我的模型看起来像:
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()
我正在发送带有所有者和 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
编辑:
序列化器.py:
class VirtualProjectSerializer(serializers.ModelSerializer):
class Meta:
model = VirtualProject
fields = '__all__'
解决方案
您可以简单地SerializerMethodField
在序列化程序中使用 a ,与总和聚合查询相关联。
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
请注意,这将是只读的,我相信这就是您想要的。
推荐阅读
- python - TF2 中的 tf.contrib.framework.list_variables
- spring - 如何在 RuntimeException 上的超类异常上实现重试但是我的代码抛出 RestClientException?
- python - 为什么 django 1.11 中的正则表达式模式不匹配?
- apache-spark - 将 GCS 连接到 Apache Drill 时出现问题:方案“gs”没有文件系统
- c# - 阻止 webview2 打开一个新窗口而不是一个新选项卡
- javascript - 在作为字节数组传递的 React js 上下载“application/vnd.ms-outlook”类型文件
- file - WinInet 在 Windows 7 中不起作用 - Dev-C++
- c++ - 为什么一个类需要移动操作来绑定到一个 std::function 具有一个类按值传递的签名?
- c# - 如何从服务器连接到onedrive,但将数据发送到前端(ui)?
- python - discord.py SyntaxError:“等待”外部函数