使用多个外键查询(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>
)