[英]Django model without primary and unique field
我有一個數據庫表:
url_id( INT(11) ) | monitor_id( (INT(11) )
--------------------+--------------------------
1 | 1
1 | 2
1 | 3
2 | 2
等等。 url_id
和monitor_id
字段都不是唯一的,不僅如此,它們是其他表(表urls
和表monitors
)的外鍵。 所以我不能改變數據庫結構。 在我的 Django 模型文件中,我為此表創建了一個 model class:
class MonitorForUrl(models.Model):
url = models.ForeignKey(Url, primary_key=True)
monitor = models.ForeignKey(Monitor)
class Meta:
db_table = 'monitors_for_url'
我將primary_key
參數設置為 true,因為如果我不設置自己的主鍵字段,Django 會為主鍵創建默認的*model_name*_id
字段。 數據庫中沒有這樣的字段,所以我將primary_key
設置為 true。 通過這種方式,我無法創建一些具有相似url_id
值的行,因為它是主鍵。 我可以告訴 Django 在不設置primary_key
選項的情況下不要創建默認主鍵字段,或者您可以建議我一些其他方法來解決我的問題嗎?
不要為此創建模型。 而是在Url和Monitor模型中添加多對多關系 。
然后,Django將為您維護此中間表。
您可能想制作復合主鍵,但 django 不支持它: https://code.djangoproject.com/wiki/MultipleColumnPrimaryKeys
你可以做的是讓它創建 id 字段,但也像這樣添加唯一約束:
class MonitorForUrl(models.Model):
url = models.ForeignKey(Url, on_delete=models.CASCADE)
monitor = models.ForeignKey(Monitor, on_delete=models.CASCADE)
class Meta:
db_table = 'monitors_for_url'
constraints = [
models.UniqueConstraint(
fields=['url', 'monitor']
name='unique_url_monitor'
)
]
這兩個字段都不會是唯一的,但字段的組合會。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.