具有多个选项的相同键的 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
只有一个值,不能同时是PAN
和DL
。
那么我如何检查这两种类型
您的意思是or
条件吗?所以你的结果集包含 type=PAN
AND type=DL
的实例?那么它将是q_objects |= [Q(type=doc) for doc in document_type]
@steveharvey:“and”条件没有意义。您可以检索具有PAL
或DL
类型的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 条件的主要内容,如果未能解决你的问题,请参考以下文章
ObjectStateManager 中已存在具有相同键的对象。 ObjectStateManager 无法跟踪具有相同键的多个对象
ObjectStateManager 中已存在具有相同键的对象。 ObjectStateManager 无法跟踪具有相同键的多个对象