首页 > 解决方案 > Django QuerySet,当值为空时删除数据

问题描述

我想问一下当属性的值为空时如何从 QuerySet 中删除数据。

模型.py:

class RnDProject(models.Model):
    name = models.CharField(max_length=100)
class Yhrtaskgrp(models.Model):
    employee_name = models.CharField(max_length=100)
    employee_id = models.CharField(max_length=10)
    hours_worked = models.FloatField()
    assigned_RnD = models.ForeignKey(RnDProject, on_delete=models.SET_NULL)

视图.py:

class RndView(APIView):
    def get(self, request):
        qs = Yhrtaskgrp.objects.values('employee_name', 'employee_id').annotate(rnd_hours=Sum('hours_worked', filter=Q(assigned_RnD_id__isnull=False)), all_hours=Sum('hours_worked'))
    return Response(qs)

当 ForeingKey 为空时,来自 qs 的对象可能如下所示:

    {
        "employee_id": "123456",
        "employee_name": "John Doe",
        "rnd_hours": null,
        "all_hours": 20
    }

我想rnd_hours == null从 QuerySet 中删除所有对象。无论如何,django 是如何丢弃这些对象的?

标签: pythondjangodjango-rest-frameworkdjango-queryset

解决方案


正如 Vishal Singh 在评论中提到的那样,我必须将 .exclude(rnd_hours__isnull=True) 添加到 qs。


推荐阅读