Django: создание списка элементов столбцов выбранных строк

Я новичок в Django и SQL и пытаюсь решить те же простые проблемы, чтобы начать понимать их.

У меня есть 3 модели: Клиент, Продукт и Заказ. Я хочу перечислить продукты, заказанные клиентом.

Модели:

class Client(models.Model):
    name = models.CharField(max_length=32)
    .....

class Product(models.Model):
    product_name = models.CharField(max_length=32)
    .....

class Order(models.Model):
    client = models.ForeignKey(Client,on_delete=models.CASCADE)
    product = models.ForeignKey(Product,on_delete=models.CASCADE)
    .....

Мое решение было следующим:

client= Client.objects.get(id=1) # target client
orders = client.order_set.all()
# or alternatively orders = Order.objects.filter(client=client)
list_of_orders=[order.product for order in orders] 

Мой вопрос: есть ли лучшее решение, которое использует некоторые возможности Django для получения списка вместо цикла for?

Спасибо за любую помощь.

В вашем случае вы можете выбрать только продукты из набора запросов, используя values_list(), вы можете добавить значения, которые вы хотите вернуть, например:

products = Order.objects.filter(client=client).values_list('product__product_name', flat=True)

пример apove вернет список названий продуктов.

Вы можете прочитать, как это работает здесь values_list in Django

После более глубокого поиска в документации Django я обнаружил, что цикл for на самом деле используется для решения случая моего вопроса.

Чтобы избежать запроса к БД на каждой итерации цикла, Django предоставляет методы select_related() и prefetch_related().

Посмотрите два метода на этой странице

Вернуться на верх