Расширенные запросы Django

У меня есть три модели: компания, актив и пользователь.Каждая компания имеет много активов (ForeignKey), и каждый актив имеет одного пользователя (ForeignKey, поскольку пользователь может владеть более чем одним активом).Я хочу выполнить запрос, который возвращает список компаний, в которых данный пользователь владеет активами, и количество активов, которыми они владеют в каждой компании.Я попытался сделать это в Python, как это:Возможно, неудивительно, что это невероятно медленно, поскольку компания может иметь 100 000 активов.Казалось, что это было бы лучше сделать на уровне базы данных, что заставило меня взглянуть на аннотации и агрегацию, но я ничего не мог найти.Может ли кто-нибудь указать мне правильное направление?
4 голоса | спросил Alex 20 PM000000110000003931 2018, 23:18:39

2 ответа


0
Вы можете сделать аннотацию с условием:читать документы условно-агрегации
ответил Bear Brown 20 PM000000110000004031 2018, 23:39:40
0
Вы можете сделать это с помощью комбинации ---- +: = 0 =: + ---- и ---- +: = 1 =: + ---- :Поэтому здесь мы возвращаем ---- +: = 3 =: + ----, который содержит ---- +: = 4 =: + ---- объекты, и каждый объект имеет дополнительный атрибут: ---- +: = 5 =: + ----, который содержит количество активов, принадлежащих данному пользователю в этом ---- +: = 6 =: + ---- .Поскольку здесь - учитывая, что я правильно понял - актив всегда принадлежит одной компании , двойной учет не учитывается : в случае отношения «многие ко многим» оценка, принадлежащая пользователю, который принадлежит двум компаниям, будет иметьувеличил счет обеих компаний.Поэтому набор запросов будет возвращать только те компании, в которых у пользователя есть активы, ---- +: = 7 =: + ---- s без каких-либо активов, принадлежащих пользователю, и, таким образом, отфильтровываются.
ответил Willem Van Onsem 20 PM000000110000002731 2018, 23:21:27

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132