Python 通过外键关联的两个不同模型的搜索结果

Python 通过外键关联的两个不同模型的搜索结果,python,django,django-models,Python,Django,Django Models,我有两个模型。一是 class Pin(models.Model): title = models.CharField(max_length=255) def __str__(self): return self.title 另一个是 class Content(models.Model): pin = models.ForeignKey(Pin, on_delete = models.CASCADE) content_type = models

我有两个模型。一是

class Pin(models.Model):
    title = models.CharField(max_length=255)
    def __str__(self):
        return self.title
另一个是

class Content(models.Model):
    pin = models.ForeignKey(Pin, on_delete = models.CASCADE)
    content_type = models.CharField(max_length=2)
    content = models.TextField()
如果
Pin
title
内容的
内容
包含搜索查询,我想显示
Pin
的列表

对于单个
Pin
可以有多个
内容
,如果
Pin的
标题
内容
匹配,我想显示
Pin的列表

如果Pin的标题包含查询,我可以生成结果。有人能帮我吗?

试试这边

 from django.db.models import Q

 query = request.GET.get("q")
    if query:
        queryset_list = Content.objects.filter(
                Q(pin__title__icontains=query)|
                Q(content_type__icontains=query)|
                Q(content__icontains=query) 
                ).distinct()
这样试试

 from django.db.models import Q

 query = request.GET.get("q")
    if query:
        queryset_list = Content.objects.filter(
                Q(pin__title__icontains=query)|
                Q(content_type__icontains=query)|
                Q(content__icontains=query) 
                ).distinct()

过滤的一般语法为:

.objects.filter(
Q(__=)|
Q(_=)
)

  • `|'这里是运算符
  • 使用
    distinct()
    ,以便在生成的查询集中再次过滤相同的查询集
如果它不适用于MySQL

def get_pin_列表(请求,q):
引脚=[]
如果q:
querysets=Content.objects.filter(Q(pin\u title\u icontains=Q)|
Q(内容包含=Q)
).distinct()
pins=[queryset.pin用于queryset中的queryset]
引脚=列表(组(引脚))
返回呈现(请求'some_page.html',{'pins':pins})

过滤的一般语法是:

.objects.filter(
Q(__=)|
Q(_=)
)

  • `|'这里是运算符
  • 使用
    distinct()
    ,以便在生成的查询集中再次过滤相同的查询集
如果它不适用于MySQL

def get_pin_列表(请求,q):
引脚=[]
如果q:
querysets=Content.objects.filter(Q(pin\u title\u icontains=Q)|
Q(内容包含=Q)
).distinct()
pins=[queryset.pin用于queryset中的queryset]
引脚=列表(组(引脚))
返回呈现(请求'some_page.html',{'pins':pins})

谢谢您的回答。这一行的
Q(content\uu\icontains=Q)
可能有键入错误。将少一条下划线。您的代码正在工作,但有时会返回重复的结果(两次相同的结果)。我使用的是mysql,此数据库后端不支持字段上的
DISTINCT
。谢谢您的回答。这一行的
Q(content\uu\icontains=Q)
可能有键入错误。将少一条下划线。您的代码正在工作,但有时会返回重复的结果(两次相同的结果)。我使用的是mysql,此数据库后端不支持在字段上使用
DISTINCT