簡體   English   中英

Django主鍵充當外鍵

[英]Django Primary key acting as a foreign key

我有一個帶有9個表的MySQL數據庫。 它們都以某種方式相關,但是我無法連接外鍵。 例如,這是我的兩個表,當我嘗試python manage.py migration時遇到錯誤:

class Release(models.Model):
     release_ID = models.CharField(max_length=25, primary_key =True)
     releaseversion = models.CharField(max_length=25)
     model_ID = models.ForeignKey(Model, on_delete=models.CASCADE) #comes from Model class

class Subrelease(models.Model):
     subrelease_ID = models.CharField(max_length=25)
     release_ID = models.ForeignKey('Release', blank =True) #comes from Release class 
     subreleaseversion = models.CharField(max_length=25)

我如何從Release類中創建主鍵,即release_ID也是Subrelease類中的ForeignKey release_ID? 任何幫助將非常感激。 謝謝。

運行遷移后,我會在cmd中獲得此信息:

django.db.utils.InternalError: (1829, "Cannot drop column 'id': needed in a foreign 
    key constraint 'app_subrel_release_ID_id_8e08450_fk_app_release_id' of table
    'db.app_subrelease'")

更新:這很好/可以嗎? 遷移到數據庫時我沒有任何錯誤?

class Release(models.Model):
     #release_ID = models.CharField(max_length=25, primary_key =True)THIS WILL BE OUR PRIMARY KEY MADE BY DJANGO
     releaseversion = models.CharField(max_length=25)
     model = models.ForeignKey(Model, on_delete=models.CASCADE) #comes from Model class model_ID



class Subrelease(models.Model):
     #subrelease_ID = models.CharField(max_length=25) THIS WILL BE OUR PRIMARY KEY MADE BY DJANGO
     release = models.ForeignKey(Release, on_delete=models.CASCADE ) #comes from Release class release_ID
     subreleaseversion = models.CharField(max_length=25)

您可以嘗試使用to_fielddb_column選項。

class B(models.Model):
    name = models.ForeignKeyField(A, to_field="name", db_column="name")

創建外鍵后,可以按以下方式訪問值和相關實例:

>>> b = B.objects.get(id=1)
>>> b.name_id # the value stored in the 'name' database column
>>> b.name # the related 'A' instance

參考: 這個答案

暫無
暫無

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

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