首页 > 解决方案 > 在 django 中使用 Q 并结合 QuerySet

问题描述

有两个模型Orders,并且Clients在创建时related_uuid会为每个模型生成相同的模型。也就是说,它们是如此紧密地联系在一起。在网站上搜索时,您需要找到两个模型中的所有出现并显示 all Orders,包括模型中related_uuid出现的那些Clients

模型.py

class Orders(models.Model):

    device = models.CharField(max_length=150)
    related_uuid = models.CharField(max_length=22, blank=True)

    def __str__(self):
        return self.device

class Clients(models.Model):

    name = models.CharField(max_length=150)
    related_uuid = models.CharField(max_length=22, blank=True)

    def __str__(self):
        return self.name

视图.py

def getQuery(self):
    search_query = self.request.GET.get('filter')
    results_query1 = Orders.objects.filter(Q(device__icontains=search_query))
    results_query2 = Clients.objects.filter(Q(name__icontains=search_query))
    conds = Q(related_uuid__icontains=results_query1) | Q(related_uuid__icontains=related_query2)
    search_filter_three = Orders.objects.filter(conds)
    return search_filter_three
  1. 也就是说,我正在寻找两种模型中的出现。
  2. 然后我尝试从两个模型Ordersrelated_uuid字段中选择模型中的所有输入。

输出 django.db.utils.OperationalError: (1241, 'Operand should contain 1 column (s)')

标签: pythondjango

解决方案


You can use chain:

from itertools import chain
search_filter_three = list(chain(results_query1, results_query2))

推荐阅读