如果我们考虑以下三种模型:客户,公司,联系人。 客户可以从几家公司购买商品,而一家公司有很多客户。此外,公司有几种“联系”类型(电子邮件,传真,电话等)。
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学习查询数据的资源,我会很高兴,因为我发现从SQL中使用django方式确实很困难。