【发布时间】:2013-08-25 01:08:27
【问题描述】:
在 MYSQL 中的新功能,我尝试手动为现有表创建外键,因为 Django 不会修改它。
python2 manage.py sqlall <appname>
显示了我的预期,但是
python2 manage.py syncdb
没有对表格做任何事情。 以下是模型:
class A(models.Model):
A_field1 = models.IntegerField(unique=True) # is not the primary key
A_field2 = models.CharField(max_length=200)
...
A_field3 = models.CharField(max_length=30)
# this method is to get the good name in the admin interface
def __unicode__(self):
return self.name
class B(models.Model):
B_field1 = models.FloatField()
...
B_field2 = models.ForeignKey(A, to_field='A_field1')
但显然我操作错误,因为我在运行服务器时没有找到引用的字段,所以我尝试删除外键,我得到了这个奇怪的错误:
mysql> ALTER TABLE A DROP COLUMN A_field1;
ERROR 1025 (HY000): Error on rename of './website/#sql-41e_740' to
'./website/<tablename>' (errno: 150)
我也试过了
mysql> ALTER TABLE B DROP COLUMN B_field2;
但得到了与上面几乎相同的错误
有什么想法吗?
这里的表格:
+--------------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+--------------+--------------+------+-----+---------+----------------+
| A_field1 | int(11) | NO | PRI | NULL | auto_increment |
| A_field2 | varchar(200) | NO | | NULL | |
| A_field3 | varchar(30) | NO | | NULL | |
....
+--------------+--------------+------+-----+---------+----------------+
+-----------------+----------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-----------------+----------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| B_field1 | double | NO | | NULL | |
...
| B_field2 | int(11) | NO | MUL | NULL | |
+-----------------+----------+------+-----+---------+----------------+
【问题讨论】:
-
这不是应用程序问题,这是数据库中的数据结构问题。因此,请提供您的表格完整结构
标签: mysql django foreign-keys