簡體   English   中英

Django模型和主要 - 外鍵關系

[英]Django models and primary-foreign key relationships

我正在編寫一個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 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

它是在課堂上建模的

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基本上模擬了一個復合鍵,並允許多個字段具有主鍵功能。 我是在正確的軌道上嗎?

根據我的閱讀, unique_together基本上模擬了一個復合鍵,並允許多個字段具有主鍵功能。 我是在正確的軌道上嗎?

不完全的。 它只是在指定字段中添加了一個復合UNIQUE KEY ,並且在創建表時才真正起作用,如果您使用Django訪問舊表,則不適用。 在Django中仍然不支持復合PRIMARY KEY (參見bug#373 )。

不幸的是,這可能意味着您將無法將Django與具有復合PRIMARY KEY的舊表一起使用,而無需修改表以包含與Django兼容的PRIMARY KEY ,即單個唯一字段上的鍵。

另見這個問題

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM