Как выполнить обратный поиск внешнего ключа в Django

У меня есть 2 модели

class Vendor(models.Model):
    vendor_name = models.CharField(max_length=50)

class Food(models.Model):
    vendor = models.ForeignKey(Vendor, on_delete=models.CASCADE)
    food_title = models.CharField(max_length=50)

Я хочу искать поставщиков на основе имени_поставщика, а также названия_блюда.

В настоящее время я могу получить поставщиков, используя этот фильтр:

keyword = "vendor name or food title"    
vendors = Vendor.objects.filter(vendor_name__icontains=keyword)

Приведенный выше фильтр будет работать только для имен поставщиков. Но я хочу также получить поставщиков на основе названия блюда.

https://docs.djangoproject.com/en/4.0/topics/db/queries/#complex-lookups-with-q-objects

vendors = Vendor.objects.filter(Q(vendor_name__icontains=keyword) | Q(food_title__icontains=keyword))

Но еще лучше https://docs.djangoproject.com/en/4.0/ref/contrib/postgres/search/

Вы можете фильтровать с помощью Q объекта [Django-doc]:

from django.db.models import Q

Vendor.objects.filter(
    Q(vendor_name__icontains=keyword) | Q(food__food_title__icontains=keyword)
)
Вернуться на верх