Django - Набор запросов со множеством связанных значений
С помощью Django я хочу создать набор запросов со связанными объектами из отношения ManyToManyField
. Моя цель - объединить связанные значения в список, как group by
или string_agg
в SQL
.
Вот мои настройки:
models.py
class BaseModel(models.Model):
id = models.UUIDField(
primary_key = True,
default = uuid.uuid4,
editable = False,
verbose_name='identifier')
created_at = models.DateTimeField(auto_now_add=True, verbose_name='created at')
updated_at = models.DateTimeField(auto_now=True, verbose_name='last update')
class Meta:
abstract = True
class Topping(BaseModel):
name = models.CharField(max_length=100, blank=False, unique=True, verbose_name='topping')
def __str__(self):
return self.name
class Pizza(BaseModel):
name = models.CharField(max_length=100, blank=False, verbose_name='nom')
fk_toppings = models.ManyToManyField(Topping, default=None, related_name='toppings_data', verbose_name='toppings')
def __str__(self):
return f"{self.name} - {self.fk_toppings}"
views.py
class PizzaView(TemplateView):
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
qs = Pizza.objects.all()
print(qs)
header = list(qs.values().first().keys())
print(f"Header: {header}")
context['pizzas'] = qs
return context
Возвращенный queryset не отображает никаких связанных объектов:
<QuerySet [<Pizza: Margherita - my_app.Topping.None>]>
И заголовок не содержит поля ManyToManyField
:
Header: ['id', 'created_at', 'updated_at', 'name']
Почему fk_toppings
здесь нет?
Как получить набор запросов со списком связанных объектов, например:
<QuerySet [<Pizza: Margherita - (Basil, Mozzarella, Tomato)]>
Я нашел этот пакет, но я удивлен, что в Django ORM
нет встроенного метода для выполнения этой стандартной реляционной операции.