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
。