Reputation: 143
I have a MySQL database with 9 tables. They are all related in some way, but I am having trouble with being able to connect with foreign keys. For example here are two of my tables that I am getting an error when I try to 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)
How would I make the primary key from class Release, which is release_ID also be the ForeignKey release_ID in class Subrelease? Any help would be much appreciated. Thank you.
After I run migrate I get this in 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'")
UPDATE: Is this good/okay to do? I don't have any errors when migrating to DB ?
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)
Upvotes: 1
Views: 3189
Reputation: 427
You could try to use the to_field
and db_column
options.
class B(models.Model):
name = models.ForeignKeyField(A, to_field="name", db_column="name")
Once you have created the foreign key, you can access the value and related instance as follows:
>>> b = B.objects.get(id=1)
>>> b.name_id # the value stored in the 'name' database column
>>> b.name # the related 'A' instance
reference: this answer
Upvotes: 2