python-3.x - 按字段过滤 django 模型并包含具有空字段的数据
问题描述
我有数据集,我需要从公司获取一些文章,但在同一个查询中,我需要获取 company = null 的数据。
基本上获取 company = 1 或 company = null
我尝试了类似的方法,但过滤器无法识别“无”而只是跳过。
# example 1
Article.objects.filter(company__in=[1, None])
我尝试了这样的方法并且这有效,但我需要类似上面的示例,因为我有过滤框架,它将 dict 作为自定义过滤器,所以我需要键值对。
# example 2
Article.objects.filter(Q(company_id=1) | Q(company=None))
有什么方法可以实现示例 1 或一些类似的解决方案?
编辑:
如果我坚持使用示例 2,有什么方法可以将这两者结合起来,我的框架中有类似的东西。
Article.objects.filter(**custom_filter)
自定义过滤器是dict,例如我目前有
custom_filter = {
'app': 1,
'company': 1
}
解决方案
据我所知,你有一个thiscustom_filter
没有过滤in
器(至少有空值?)。而且你还有一个你想要的 id 列表,也许你也可能想要也可能不想要空值。您可以执行以下操作来进行此类查询:
company_list = [1, 2, 3] # Don't put `None` here
nulls_needed = True # Change as per your need
custom_filter = {
'app': 1,
}
Article.objects.filter(
Q(company__isnull=nulls_needed) | Q(company__in=company_list), # positional args first
**custom_filter # keyword args later
)
推荐阅读
- r - 如何将存储在向量中的变量值分配给存储在 R 中的字符向量中的一系列变量名?
- firebase - Can I merge data when sending put request to firebase realtime database using axios?
- github - 通过浏览器删除 Github 上的 Commit
- php - PHP按值分组关联数组的键
- list - 用于从列表中删除元素的书签
- javascript - POST 请求 - 不适用于 Node 和 Express
- android - 无法确定任务 ':app:lintVitalRelease' 的依赖关系
- android - Android Studio 作为 Flutter Project 运行 Android (Java) 项目
- flutter - 如何将本机 macOS 可执行文件与颤振应用程序捆绑在一起?
- sql-server - Azure VM SQL Server 使用来自另一个 Azure VM ASP.NET 应用程序的 Windows 身份验证