【问题标题】:Django Primary key acting as a foreign keyDjango 主键充当外键
【发布时间】:2016-11-30 12:50:35
【问题描述】:

我有一个包含 9 个表的 MySQL 数据库。它们都以某种方式相关,但我无法与外键连接。例如,这是我的两个表,当我尝试 python manage.py migrate 时出现错误:

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)

【问题讨论】:

  • “一个错误”?分享就是关怀。
  • 你能正确地格式化你的缩进吗?什么错误?追溯?另外,我认为您不希望 blank=True 作为外键
  • 哎呀,对不起,我忘了发布错误。谢谢你让我知道。我更新了我的问题。

标签: python mysql django


【解决方案1】:

您可以尝试使用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

参考: this answer

【讨论】:

  • 我试过这个但我得到这个错误:AttributeError: 'module' object has no attribute 'ForeignKeyField'
  • @Carbon,那是因为它应该只是ForeignKey,而不是ForeignKeyField
猜你喜欢
  • 1970-01-01
  • 2016-04-02
  • 1970-01-01
  • 2013-05-12
  • 1970-01-01
  • 2015-10-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多