我有一个模型叫做Products:
class Products(models.Model):
id = models.PositiveIntegerField(primary_key=True)
name = models.CharField(max_length=255)
image = models.CharField(max_length=255, blank=True, null=True)
status = models.IntegerField()
"""created_by = models.IntegerField(blank=True, null=True)
updated_by = models.IntegerField(blank=True, null=True)"""
created_by = models.ForeignKey('User', db_column='created_by', related_name='created_product')
updated_by = models.ForeignKey('User', db_column='updated_by', related_name='update_product')
created_at = models.DateTimeField(blank=True, null=True)
updated_at = models.DateTimeField(blank=True, null=True)
MySQL shell 显示类型为 id 的字段:
| id | int(10) unsigned | NO | PRI | NULL | auto_increment |
我想以这种方式创建一个外键:
class ProductVarieties(models.Model):
id = models.PositiveIntegerField(primary_key=True)
product = models.ForeignKey(Products)
variety = models.CharField(max_length=200, blank=True, null=True)
created_at = models.DateTimeField(blank=True, null=True)
updated_at = models.DateTimeField(blank=True, null=True)
在运行迁移时,我遇到了一个错误:
django.db.utils.IntegrityError: (1215, 'Cannot add foreign key constraint')
如果我执行describe product_varieties
,则会得到以下结果:+------------+------------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+------------+------------------+------+-----+---------+-------+
| id | int(10) unsigned | NO | PRI | NULL | |
| variety | varchar(200) | YES | | NULL | |
| created_at | datetime(6) | YES | | NULL | |
| updated_at | datetime(6) | YES | | NULL | |
| product_id | int(11) | NO | | NULL | |
+------------+------------------+------+-----+---------+-------+
注意,
product_id
的类型显示为int(11)
而不是int(10) unsigned
。
这意味着 Django 没有检测到正确的外键字段类型。
models.AutoField
会创建带有int(11)
而不是int(10) unsigned
的主键。我已经在我的表中有了int(10) unsigned
类型的表。我想能够与它们建立外键关系。 - Ishan KhareAutoField
,则在创建外键
时会出现int(11)和int(10) unsigned
之间的类型冲突。Django不允许我指定创建外键
时要使用的字段类型,而mysql
也不允许我从int(11)
到int(10) unsigned
创建外键
。 - Ishan Khare