2013-05-31 163 views
0

我正在编写一个Django应用程序,该应用程序使用现有遗留数据与重新映射的表和关系。我已经给出了一个包含表之间的主 - 外键关系的表,但是无法理解如何将它适配到Django模型。Django模型和主要 - 外键关系

例如,表country_metrics被定义为

+-------------+---------------+------+-----+---------+-------+ 
| Field  | Type   | Null | Key | Default | Extra | 
+-------------+---------------+------+-----+---------+-------+ 
| ContractNum | varchar(10) | NO |  | NULL |  | 
| fips  | varchar(5) | NO |  | NULL |  | 
| metric_id | int(10)  | NO |  | NULL |  | 
| time_id  | int(10)  | NO |  | NULL |  | 
| value  | decimal(12,3) | NO |  | NULL |  | 
| eff_date | date   | NO |  | NULL |  | 
| exp_date | date   | YES |  | NULL |  | 
+-------------+---------------+------+-----+---------+-------+ 

,我已经被赋予其在类

class ContractCountyMetrics(models.Model): 
    contractnum = models.CharField(max_length=10L, db_column='ContractNum', primary_key = true) # Field name made lowercase. 
    fips = models.CharField(max_length=5L) 
    metric_id = models.IntegerField() 
    time_id = models.IntegerField() 
    value = models.DecimalField(max_digits=14, decimal_places=3) 
    eff_date = models.DateField() 
    exp_date = models.DateField(null=True, blank=True) 
    contractKey = models.ForeignKey(Contracts) 
    fipsKey = models.ForeignKey(Counties) 
    metricKey = models.ForeignKey(Metrics) 
    timeKey = models.ForeignKey(Time) 
    class Meta: 
     db_table = 'txn_contract_county_metrics' 
     unique_together("contractKey", "fipsKey", "metricKey", "timeKey") 

被建模的

ContractNum primary key, foreign key references table contracts 
fips  primary key, foreign key references table country 
metric_id primary key, foreign key references table metrics 
time_id  primary key, foreign key references table time 

的关系映射从我读的,unique_together基本上模拟一个复合键,并允许多个字段具有主键功能。我在正确的轨道上吗?

回答

2

从我读到的,unique_together基本上模拟了一个复合 键,并允许多个字段具有主键功能。 我在正确的轨道上吗?

不完全。它只是将UNIQUE KEY复合到指定的字段中,并且在创建表时仅真正起作用,如果您使用Django访问旧表,则这不适用。在Django中仍然不支持复合PRIMARY KEY(请参阅bug #373)。

不幸的是,这可能意味着你将无法使用具有复合PRIMARY KEY的遗留表使用Django,而无需修改该表以包含Django兼容的PRIMARY KEY,也就是说,在单个唯一的,领域。请参阅this question

+0

谢谢。我刚刚与数据架构师就此问题进行了联系,并可能会导致一些关系性的重新思考。 – Jason