具有多个选项的相同键的 django orm AND 条件

Posted

技术标签:

【中文标题】具有多个选项的相同键的 django orm AND 条件【英文标题】:django orm AND condition for same key with multiple options 【发布时间】:2022-01-22 07:40:07 【问题描述】:

我有一个模型 WebDocuments 具有不同文档类型的多个对象,我想应用和条件

    document_type= ['PAN', 'DL']
    doc_obj = WebDocuments.objects.filter(is_active=True)
    q_objects = Q()
    if document_type:
        q_objects &= [Q(type=doc) for doc in document_type]
    check_obj = doc_obj.filter(q_objects)
    if check_obj:
        return True
    return False

无论两种文档类型是否存在,我都想返回 True 或 False。 我的数据库中的两种文档类型仍然返回空,因为它在保存对象上过滤了两种类型。 有什么方法可以使用 and 运算符,或者我必须使用所有文档类型循环查询集

这是我的模型

class WebDocuments(TimeStampedModel):
   uuid = models.UUIDField(default=uuid.uuid4, null=True, blank=True)
   lead = models.ForeignKey(Lead, related_name='web_lead_document')
   type = models.CharField(choices=DocumentTypeChoices.choices, max_length=100)

【问题讨论】:

一个type只有一个值,不能同时是PANDL 那么我如何检查这两种类型 您的意思是or 条件吗?所以你的结果集包含 type=PAN AND type=DL 的实例?那么它将是q_objects |= [Q(type=doc) for doc in document_type] @steveharvey:“and”条件没有意义。您可以检索具有PALDL 类型的Webdocument,但不能同时检索两者。 我想如果任何文件不存在它返回无 【参考方案1】:

参考这些 - https://www.geeksforgeeks.org/multiplechoicefield-django-forms/ https://www.teckiy.com/support/questions/how-to-setup-multi-choice-field-in-django-along-with-django-filter-3033665043/

或创建新的模型命名Type,并将其添加到类型为多对多字段的WebDocuments模型中,然后进行查询。

【讨论】:

以上是关于具有多个选项的相同键的 django orm AND 条件的主要内容,如果未能解决你的问题,请参考以下文章

ColdFusion:具有多个外键的 ORM 集合

Django ORM & hstore:计算键的唯一值

Django 和具有多个外键的模型

ObjectStateManager 中已存在具有相同键的对象。 ObjectStateManager 无法跟踪具有相同键的多个对象

ObjectStateManager 中已存在具有相同键的对象。 ObjectStateManager 无法跟踪具有相同键的多个对象

具有多个进程的 SOA 与 Django ORM