如何根据条件从查询集中删除项目,然后 return 作为 django 中的 json 响应

How to remove items from queryset based on condition and then return as json response in django

我正在使用 select_related() 进行连接操作并使用以下代码过滤记录

class ActiveclientViewSet(viewsets.ModelViewSet):
 queryset = Ruledefinitions.objects.select_related('pmdclinicalruleid').filter(pmdclinicalruleid__effectivedate__lt = timezone.now(),pmdclinicalruleid__retireddate__gt = timezone.now())
 serializer_class = RuledefinitionsSerializer

在上面的代码中,是否可以检查 queryset 中的第一个项目是否有 rulename 字段值为空,如果它是空的,我需要 return json 响应中剩余的 queryset 项目如果不为空 return 所有项目作为 json 响应。

检查第一个元素有什么问题?

class ActiveclientViewSet(viewsets.ModelViewSet):
    queryset = Ruledefinitions.objects.select_related('pmdclinicalruleid')
    serializer_class = RuledefinitionsSerializer

    def get_queryset(self):
        now = timezone.now
        queryset = super().get_queryset().filter(
            pmdclinicalruleid__effectivedate__lt=now,
            pmdclinicalruleid__retireddate__gt=now,
        )
        first_item = queryset.first()
    
        if first_item is not None and not first_item.rulename:
            queryset = queryset[1:]

    return queryset

您在 timezone.now() 上的过滤器仅执行一次:当您的类被定义时。所以任何对该方法的调用都不应该在类定义中,而是在每个请求中调用。

在您的实际实现中,一旦您启动服务器,就会立即调用 now。两周后,过滤器仍将处于同一日期。