Django — создайте эквивалент запроса «перекрестного соединения» с помощью Django ORM

#django #orm #join #many-to-many #django-orm

#django #orm #Присоединиться #многие ко многим #django-orm

Вопрос:

У меня есть две модели Django, которые связаны друг с другом через отношения «многие ко многим».

Мне нужно перечислить перекрестное произведение обеих таблиц.

Для простоты предположим, что две модели — это пицца и начинка.

Я бы хотел, чтобы запрос возвращал что-то вроде этого:

 pizza_name    topping
---------------------
all dressed   cheese
all dressed   mushrooms
all dressed   onions
all dressed   peperoni
all dressed   pepper
reddit        cheese
reddit        peperoni
reddit        bacon
reddit        baconbits
  

Объем данных будет очень большим, и мне абсолютно необходимо использовать count и slices, поэтому я не могу просто повторять модель и обрабатывать данные по ходу работы.

Есть идеи, как мне поступить?

Комментарии:

1. Под перекрестным соединением вы подразумеваете, что хотите возвращать возвращаемые p*t строки, где p количество пицц и t количество начинок? Или вы хотите возвращать каждую пару ( pizza , topping ) в pizza_topping промежуточной таблице? Опубликованный вами пример результатов предполагает последнее.

2. что сказал Аласдэр. другими словами, опубликованный вами пример не является перекрестным продуктом.

Ответ №1:

В конце концов я решил это, просто выполнив итерацию по промежуточной таблице.