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().
Посмотрите два метода на этой странице