Как выполнить обратный поиск внешнего ключа в 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)
)