使用多个外键查询(django)
Query with multiple foreign keys (django)
我正在为我正在工作的网站制作一个搜索栏,但当我想从不同模型(它们之间相关)过滤不同字段时遇到了麻烦,这是我的模型:
class Project(models.Model):
name = models.CharField(max_length=250)
objective = models.CharField(max_length=250)
description = models.TextField()
launching = models.CharField(max_length=100, null=True, blank=True)
image = models.ImageField(
upload_to='imgs/', null=True, blank=True)
image_thumbnail = models.ImageField(
upload_to='thumbnails/', null=True, blank=True)
slug = models.CharField(max_length=250)
class Meta:
db_table = 'project'
def __str__(self):
return self.name
class Institution(models.Model):
name = models.CharField(max_length=250)
project = models.ManyToManyField(Proyecto)
class Meta:
db_table = 'institution'
def __str__(self):
return self.name
并且我希望能够通过项目或机构名称进行搜索,但我的代码只使用了机构名称。
def searchbar(request):
if request.method == 'GET':
search = request.GET.get('search')
post = Project.objects.all().filter(name__icontains=search, institution__name__icontains=search)
return render(request, 'searchbar.html', {'post': post, 'search': search})
如何搜索所有匹配名称或机构名称的项目?
顺便说一句,我正在使用 SQL,不确定它是否相关,但我认为我应该添加该信息。
你可以.filter(…)
[Django-doc] with Q
objects [Django-doc]:
from django.db.models import <b>Q</b>
Project.objects.filter(<b>Q(name__icontains=search) | Q(institution__name__icontains=search)</b>)
或者您可以使用 _connector
参数:
from django.db.models import <b>Q</b>
Project.objects.filter(
name__icontains=search,
institution__name__icontains=search,
<b>_connector=Q.OR</b>
)
我正在为我正在工作的网站制作一个搜索栏,但当我想从不同模型(它们之间相关)过滤不同字段时遇到了麻烦,这是我的模型:
class Project(models.Model):
name = models.CharField(max_length=250)
objective = models.CharField(max_length=250)
description = models.TextField()
launching = models.CharField(max_length=100, null=True, blank=True)
image = models.ImageField(
upload_to='imgs/', null=True, blank=True)
image_thumbnail = models.ImageField(
upload_to='thumbnails/', null=True, blank=True)
slug = models.CharField(max_length=250)
class Meta:
db_table = 'project'
def __str__(self):
return self.name
class Institution(models.Model):
name = models.CharField(max_length=250)
project = models.ManyToManyField(Proyecto)
class Meta:
db_table = 'institution'
def __str__(self):
return self.name
并且我希望能够通过项目或机构名称进行搜索,但我的代码只使用了机构名称。
def searchbar(request):
if request.method == 'GET':
search = request.GET.get('search')
post = Project.objects.all().filter(name__icontains=search, institution__name__icontains=search)
return render(request, 'searchbar.html', {'post': post, 'search': search})
如何搜索所有匹配名称或机构名称的项目?
顺便说一句,我正在使用 SQL,不确定它是否相关,但我认为我应该添加该信息。
你可以.filter(…)
[Django-doc] with Q
objects [Django-doc]:
from django.db.models import <b>Q</b>
Project.objects.filter(<b>Q(name__icontains=search) | Q(institution__name__icontains=search)</b>)
或者您可以使用 _connector
参数:
from django.db.models import <b>Q</b>
Project.objects.filter(
name__icontains=search,
institution__name__icontains=search,
<b>_connector=Q.OR</b>
)