为了账号安全,请及时绑定邮箱和手机立即绑定

Django模型和主外键关系

Django模型和主外键关系

凤凰求蛊 2021-03-12 15:08:23
我正在编写一个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,即单个唯一字段上的键。


查看完整回答
反对 回复 2021-03-29
  • 2 回答
  • 0 关注
  • 204 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信