2016-02-25 2 views
0
class Agent(models.Model): 
    full_name = models.CharField(max_length=200) 
    short_code = models.CharField(max_length=200) 

class Phone(models.Model): 
    date = models.DateTimeField('Call Time') 
    ... 
    // Newly added: 
    agent = models.ForeignKey(Agent, on_delete=models.CASCADE) 

Я использую mysql. После добавления внешнего ключа команда makemigrations работает. Питон manage.py мигрировать команду даст ошибку:Django migrate после добавления внешнего ключа дает ошибку «неизвестного столбца»

File "/Library/Python/2.7/site-packages/django/db/backends/mysql/base.py", line 112, in execute 
    return self.cursor.execute(query, args) 
    File "/Library/Python/2.7/site-packages/MySQLdb/cursors.py", line 205, in execute 
    self.errorhandler(self, exc, value) 
    File "/Library/Python/2.7/site-packages/MySQLdb/connections.py", line 36, in defaulterrorhandler 
    raise errorclass, errorvalue 
django.db.utils.OperationalError: (1054, "Unknown column 'agent' in 'dash_phone'") 

питон manage.py sqlmigrate тире 0004 дает:

BEGIN; 
-- 
-- Alter field agent on phone 
-- 
ALTER TABLE `dash_phone` CHANGE `agent` `agent_id` integer NOT NULL; 
ALTER TABLE `dash_phone` MODIFY `agent_id` integer NOT NULL; 
CREATE INDEX `dash_phone_agent_id_e9e1c068_uniq` ON `dash_phone` (`agent_id`); 
ALTER TABLE `dash_phone` ADD CONSTRAINT `dash_phone_agent_id_e9e1c068_fk_dash_agent_id` FOREIGN KEY (`agent_id`) REFERENCES `dash_agent` (`id`); 

COMMIT; 
+0

Это полная трассировка? – vsd

ответ

2

хмм, это выглядит как ошибка. Django преобразует поле агента в внешний ключ, прежде чем он установит новое поле агента. Он начинается с ALTER TABLE ... CHANGE, прежде чем он фактически добавит поле.

Попробуйте добавить поле в два этапа:

  1. Добавить поле IntegerField агента (не как чужеродные ключ), makemigrations, мигрируют
  2. Изменить агента из целого поля внешнего ключа, makemigrations, мигрируют

Рассмотрите возможность открытия билета на django по этой проблеме.

+0

Получается, что у меня уже есть поле «агент» в модели телефона. Как только я попытаюсь выполнить миграцию, он попытается превратить это поле во что-то другое, а исходное поле агента потеряно. Спасибо за совет! – viviwill

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