首页 > 解决方案 > 使用 ReverseManager 排除 Django 过滤器

问题描述

我有一个模型Tenant和一个模型,该模型SocialMediaContextTenant具有该模型的外键Tenant

class SocialMediaContextTenant(AbstractSocialMediaContext):
    tenant = models.ForeignKey('campaigns.Tenant')
    secret = models.CharField(...)

我想过滤所有已连接SocialMediaContextTenant已设置secret字段的租户。

到目前为止,我有这个查询

Tenant.objects
      .exclude(socialmediacontexttenant__secret='')
      .values_list('id', flat=True)

但是排除过滤器似乎不起作用,因为我仍然得到一个空secret字段的结果

标签: djangofilterdjango-queryset

解决方案


看起来secret字段具有空值,而不是空字符串。要排除这些记录,请使用__isnull查找:

Tenant.objects.exclude(socialmediacontexttenant__secret='').exclude(socialmediacontexttenant__secret__isnull=True)

推荐阅读