Django将两个表合并为单个模型

时间:2017-01-03 09:49:11

标签: django django-models

我有一个外部数据库,我无法以任何方式修改(只读)。它有三个表格 - Companyid),CompanyContactcompany_idcontact_id),Contactid,{ {1}})。

基本上,company_idContact表有一个可以为空的外键,它与多对一有效,但如果company_id为Company,我必须查看{{} 1}}表,这是多对多的关系。

如何将这两个表格nullCompanyContact)合并到一个模型中Contact?换句话说,我如何获得给定公司的所有联系人?

在SQL中类似于:

CompanyContact

Django模特:

Contact

我没有select contact.id from contact where company_id = XXX union select contact_id from companycontact where company_id = XXX的模型。并且没有什么可以在观点中显示,因为这基本上是我的问题,如何获得给定公司的联系人。

1 个答案:

答案 0 :(得分:0)

数据库中的原始表格结构不正确。联系人字段应该有company_id字段,这是不正确的。这不必要地使所有查询(原始SQL或Django)复杂化,因为在contact_id字段上需要额外的检查。

另一方面,对于多对多关系中的两个实体来说,只有一个映射而不是多个映射是完全合法的。所以这个问题没有一个明确的答案。我想你最好的选择是添加一个ManyToMany字段。我提出这个建议纯粹是因为你说数据是只读

class Contact(models.Model):
    uuid = models.CharField(max_length=36, primary_key=True, db_column='id')
    company = models.ForeignKey(Company, db_column='company_id')
    companies = models.ManyToManyField(Company, related_name='companies')


    class Meta:
        managed = False