Запрос с несколькими внешними ключами (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})

Как я могу найти все проекты, которые совпадают по названию ИЛИ названию учреждения?

BTW, я использую SQL, не уверен, что это имеет значение, но я подумал, что должен добавить эту информацию.

You can .filter(…) [Django-doc] with Q objects [Django-doc]:

from django.db.models import Q

Project.objects.filter(Q(name__icontains=search) | Q(institution__name__icontains=search))

или вы можете работать с параметром _connector:

from django.db.models import Q

Project.objects.filter(
    name__icontains=search,
    institution__name__icontains=search,
    _connector=Q.OR
)
Вернуться на верх