我正在编写一个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 | |+-------------+---------------+------+-----+---------+-------+而且我得到了一个关系映射ContractNum primary key, foreign key references table contractsfips primary key, foreign key references table countrymetric_id primary key, foreign key references table metricstime_id primary key, foreign key references table time它是在课堂上建模的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")根据我的阅读,unique_together基本上可以模拟组合键,并允许多个字段具有主键功能。我在正确的轨道上吗?
2 回答
qq_遁去的一_1
TA贡献1725条经验 获得超7个赞
根据我的阅读,
unique_together
基本上可以模拟组合键,并允许多个字段具有主键功能。我在正确的轨道上吗?
不完全的。它只是将复合添加UNIQUE KEY
到指定的字段,并且仅在创建表期间真正起作用,如果您使用Django访问旧表,则该设置将不起作用。PRIMARY KEY
在Django中,仍然不支持Composites (请参见Bug#373)。
不幸的是,这可能意味着您不能将Django与具有复合表的旧表一起使用PRIMARY KEY
,而无需修改表以包含与Django兼容的PRIMARY KEY
,即单个唯一字段上的键。
添加回答
举报
0/150
提交
取消