Если мы рассмотрим три следующие модели: клиенты, компании, контакты.Клиенты могут приобретать товары у нескольких компаний, а у компании много клиентов.Кроме того, у компании есть несколько «контактных» типов (электронная почта, факс, телефон, ...).
class Clients(models.Model):
fname= models.CharField(max_length=45, null=False)
company= models.ManyToManyField(to='Companies', related_name='provider', blank=True)
class Companies(models.Model):
name= models.CharField(max_length=45, null=False)
class Contacts(models.Model):
contact= models.CharField(max_length=45)
type= models.IntegerField(choices=TYPE)
company= models.ForeignKey(to='Companies', related_name= 'company_contacts', on_delete=models.CASCADE)
Для данного клиента я хотел бы получить информацию о всех компаниях, которые он приобрел, вместе со всеми данными о компании (хранится в модели «Контакты»).В SQL с промежуточной таблицей (clients_companies) я буду делать:
SELECT cl.fname, cp.name, ct.contact, ct.type
FROM Clients cl
JOIN Clients_Companies cc ON cl.id = cc.clients_id
JOIN Companies cp ON cp.id = cc.companies_id
JOIN Contacts ct ON cp.id = ct.companies_id;
, что даст:
+---------+-----------+-----------------+--------+
| fname | name | contact | type |
+---------+-----------+-----------------+--------+
| Client1 | Company A | 333-555-1234 | phone |
| Client1 | Company A | email@email.com | email |
| Client1 | Company B | 202-555-0191 | phone |
| Client1 | Company B | 202-555-9999 | fax |
| Client1 | Company B | arg@arg.com | email |
+---------+-----------+-----------------+--------+
В django я хотел бы что-то похожее на:
data = [
{'Company A':[{'type':'phone', 'contact':'333-555-1234'},
{'type':'email', 'contact':'email@email.com'}],
'Company B':[{'type':'phone', 'contact':'202-555-0191'},
{'type':'fax', 'contact':'202-555-9999'},
{'type':'email', 'contact':'arg@arg.com'},],
}]
Любые предложения по решению этой проблемы приветствуются.Кроме того, если у вас есть источники для изучения запросов к данным с использованием django ORM, я буду очень рад, поскольку мне было очень трудно работать с django при переходе с SQL.