2013-08-22 2 views
2

Новое в MYSQL Я попытался создать ручной доступ к внешнему ключу к таблицам существительных, потому что Django не изменил бы его.Проблема с MYSQL 1025

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 |    | 
+-----------------+----------+------+-----+---------+----------------+ 
+0

Это не проблема приложения, это структура данных в проблеме с БД. Итак, предоставьте свою полную структуру таблицы. –

ответ

0

Вы не можете отбросить внешний ключ, используя имя столбца, так:

SHOW CREATE TABLE myTable 

Это покажет имя вашего ключа, то падение его

ALTER TABLE myTable DROP FOREIGN KEY its_name 

Затем также опустить колонку

ALTER TABLE mytable DROP COLUMN myColumn; 
+0

Thx это сработало отлично, так что это за сообщение об ошибке? – tbenett

+0

Почему django отказывается это делать? – tbenett

+0

Не django, ошибка Mysql 150 - плохо сформированный внешний ключ. Столбец, на который ссылается внешний ключ, должен быть одного и того же типа или добавить внешний ключ для чего-то, чего не существует. – Mihai

Смежные вопросы