2016-07-26 198 views
0

我有一個帶有9個表的MySQL數據庫。它們都以某種方式相關,但我無法連接外鍵。例如這裏有兩個我的表,我得到一個錯誤,當我嘗試蟒蛇manage.py遷移:Django作爲外鍵的主鍵

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_ID也算是ForeignKey的RELEASE_ID在課堂Subrelease?任何幫助將非常感激。謝謝。

後,我跑遷移我得到這個在CMD: django.db.utils.InternalError:(1829年,「不能刪除列‘ID’:在一個外鍵約束需要‘app_subrel_release_ID_id_8e08450_fk_app_release_id’表‘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) 
+1

「錯誤」

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

一旦你創建了外鍵,你可以按如下方式訪問價值和相關實例?分享是關懷。 –

+0

你能正確格式化你的縮進嗎?什麼錯誤?追溯?此外,我不認爲你想空白=真作爲外鍵 –

+0

哎呀,對不起,我忘了發佈錯誤。謝謝你讓我知道。我更新了我的問題。 – Carbon

回答

1

你可以嘗試使用to_fielddb_column選項。

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

參考: this answer

+0

我試過這個,但我得到這個錯誤:AttributeError:'模塊'對象沒有屬性'ForeignKeyField' – Carbon

+0

這是正確的,我會盡力幫助你 – moshemeirelles