2016-07-26 199 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