簡體   English   中英

Django model 沒有主要和唯一字段

[英]Django model without primary and unique field

我有一個數據庫表:

  url_id( INT(11) )  |   monitor_id( (INT(11) )
 --------------------+--------------------------
        1            |         1
        1            |         2
        1            |         3
        2            |         2

等等。 url_idmonitor_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.

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