Поиск по внешнему ключу Django
Обучаюсь django и столкнулся с проблемой: есть поиск по таблице с записями из бд на сайте и нужно его реализовать по всем полям, но никак не могу реализовать его по forigin key.
'''View.py'''
search_query_date = request.GET.get('search_date', '')
search_query_text = request.GET.get('search_text', '')
if (search_query_text or search_query_date == None):
orders = Order.objects.filter(Q(adress__icontains=search_query_text) | Q(customer=search_query_text)).order_by('-date')
elif (search_query_text or search_query_date):
orders = Order.objects.filter(Q(adress__icontains=search_query_text) | Q(date__icontains=search_query_date)).order_by('-date')
else:
orders = Order.objects.order_by('-date')
Модель:
'''model.py'''
class Order(models.Model):
customer = models.ForeignKey(Сustomer, verbose_name="Заказчик", on_delete=models.SET_NULL, null=True)
product = models.ForeignKey(Product, verbose_name="Продукт", on_delete=models.SET_NULL, null=True, blank=True)
quantity = models.IntegerField(verbose_name="Количество", null=True, blank=True)
final_price = models.IntegerField(verbose_name="Итоговая стоимость", null=True, blank=True)
adress = models.CharField(max_length=20, verbose_name="Адрес")
Т.е. например введя в поле поиска "Иван" получить не ошибку "Field 'id' expected a number but got 'Иван'.", а вернуть его по полю name из зависимой таблицы.
Ответы (1 шт):
Автор решения: Sergey Gornostaev
→ Ссылка
Если предположить, что имя храниться в поле name класса Customer, то
Q(customer__name=search_query_text)