Возьмите срез QuerySet: Product.objects.order_by('pk')[:5]. В SQL это ограничит результат пятью строками; сортировка по pk делает выбор воспроизводимым, но не случайным.
Получение пяти товаров из базы с помощью Django ORM
Возьмите срез QuerySet: Product.objects.order_by('pk')[:5]. В SQL это ограничит результат пятью строками; сортировка по pk делает выбор воспроизводимым, но не случайным.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
Необходимо выбрать любые пять записей из модели Product, используя возможности Django ORM. В качестве основы используйте приведённые ниже модели.
from django.db import models
class Category(models.Model):
name = models.CharField(max_length=100)
def __str__(self):
return self.name
class Tag(models.Model):
name = models.CharField(max_length=50)
def __str__(self):
return self.name
class Product(models.Model):
name = models.CharField(max_length=100)
price = models.DecimalField(max_digits=10, decimal_places=2)
category = models.ForeignKey(Category, on_delete=models.CASCADE)
tags = models.ManyToManyField(Tag, related_name='products')
def __str__(self):
return self.name
Ответ
Возьмите срез QuerySet: Product.objects.order_by('pk')[:5]. В SQL это ограничит результат пятью строками; сортировка по pk делает выбор воспроизводимым, но не случайным.
Пример:
products = Product.objects.order_by('pk')[:5]
Запрос выполняется при обходе или другом вычислении QuerySet. Если товаров меньше пяти, вернутся все имеющиеся. «Любые» не означает «случайные»: order_by('?') может быть дорогим на большой таблице и здесь не нужен. При последующем выводе category используйте select_related, а для tags — prefetch_related, чтобы не создавать дополнительные запросы на каждый товар.