@yuretzgt

Как сделать аналог LEFT JOIN в Django ORM?

models.py:

class Products(models.Model):
      name = models.CharField()
      price = models.IntegerField()

class Products_Images(models.Model):
      products  = models.ForeignKey(Products)
      image = models.ImageField()
      name = models.CharField()

Мне нужно сделать выбору по базе Products и выбрать только одну или без записи из Products_Images согласно фильтрам.

Примерно вот так:

SELECT Products.*,Products_Images.* FROM Products
LEFT JOIN Products_Images on Products.id=Products_Images.product_id
        AND Products_Images.name LIKE '%pizza%'
WHERE Products.price >= 50
  • Вопрос задан
  • 123 просмотра
Пригласить эксперта
Ответы на вопрос 2
fox_12
@fox_12 Куратор тега Django
Расставляю биты, управляю заряженными частицами
Что-то вроде (точный синтаксис подбирайте сами):
qs = Products.objects.filter(price__gte=50, products_images_set__icontains='pizza')

можно добавить что-то типа prefetch_related чтобы одной выборкой выбрать связанные products_images чтобы по два раза в базу не ходить...
Ответ написан
@Everything_is_bad
Когда используешь Django ORM перестань думать уровнем SQL, а думай уровнем взаимодействия с объектами, ну и начни читать доки отсюда https://docs.djangoproject.com/en/5.0/topics/db/qu... и ниже, там все ответы на твои вопросы (обрати внимание на annotate). Так же этот раздел, более подробней про queryset https://docs.djangoproject.com/en/5.0/ref/models/q...
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы