【问题标题】:Django - Return none object if record not found given the queried listDjango - 如果给定查询列表未找到记录,则返回无对象
【发布时间】:2026-01-04 08:40:01
【问题描述】:

我有一个 ID 列表[1,2,3,4,5,6,7,8,9,10]

现在我想查询具有上述 id 列表的模型。这就是我执行操作的方式。

ModelA.objects.filter(id__in=ids)

这将返回与给定 id 列表匹配的 ModelA 对象。现在考虑 ids [2,3,5] 不存在。我能否得到一个与输入列表长度相同的查询集,包括所有未找到的对象。??

例如:-

如果没有找到[2,3,5],它应该返回

[1,None,None,4,None,6,7,8,9,10]

我怎样才能实现它?

【问题讨论】:

    标签: python mysql django django-queryset


    【解决方案1】:

    你可以做类似...

    ids = [1,2,3,4,5,6,7,8,9,10]
    results = ModelA.objects.filter(id__in=ids)
    result_ids = [result.id for result in results]
    return [id if id in result_ids else None for id in ids]
    

    【讨论】:

    • 我不知道数据库将如何响应表示存在空白行。为什么一定要在数据库里做呢?
    • 因为我不希望事情发生在应用程序级别,涉及循环。
    • 好的。好吧,我无法想象数据库可以自己完成。如果有的话,Django ORM 会做一些与此非常相似的事情,这仍然是在应用程序级别。
    • @PythonEnthusiast 如果您希望在数据库级别完成,您可能需要编写原始 SQL 语句。尽管如此,您应该修改您的问题以包括您希望它在数据库级别完成,因为大多数人会根据您的问题标签和给定的代码假设您希望它在应用程序级别完成。
    最近更新 更多