2016-01-06 36 views
2

我似乎無法能夠通過python manage.py syncdb這是用來創建我最初的表,MyTable的包括增加更多的表我models.py。我試過python manage.py makemigrations,然後做了python manage.py migrate --fake <appname>甚至python manage.py migrateDjango中不能添加新表

執行syncdb給我django.db.utils.OperationalError:(1050,「表‘myapp_mytable’已經存在」)和轉移命令不給任何錯誤,但沒有得到創建表。

Models.py

class MyTable(models.Model): 
    #table details 
    #this table is already created. 

class NewTable(models.Model): 
    #table details 
    #this is the table I want to add 

注:我使用Django 1.7。

+0

您是否檢查過表是否已經存在? – Carlos

+0

嘗試通過從您的遷移中刪除該表來運行。 –

+0

@卡洛斯是的,第一張桌子已經存在了,正如我在問題中所說的。這是應該添加的新表,不起作用。我不認爲我必須刪除我之前的所有表格才能創建新的表格。 – Yax

回答

4

通過從syncdb開始,然後切換到遷移,您已陷入不一致的情況。遷移生成器無法知道您是否在其功能外創建了初始表,因此將不斷嘗試自行創建它。

要恢復,你可以這樣做。刪除你的遷移,然後註釋掉你的第二個模型的代碼。運行makemigrations,然後運行migrate --fake,以獲取記錄,直到您實際所在的位置。現在,取消註釋你的第二個模型,並再次運行makemigrations;之後,migrate應該可以正常工作來創建第二個表。

將來,請確保您始終使用遷移。 (事實上​​,在更新版本的Django中,這並不是問題,因爲syncdb已被刪除。)

+0

完美!它做到了。 Muchas gracias! – Yax

+0

非常感謝這個解決方案。 – Ellrohir

1

在您的應用/遷移文件夾中,您將擁有類似0001_initial.py和0002_auto_20151027_0524.py的文件。第一次運行'python manage.py makemigrations'時,0001_initial.py包含更改。之後,無論何時運行此命令,都會創建像0002_auto_20151027_0524.py這樣的文件。 可以有兩種可能的解決方案。

  1. 在像0002_auto_20151027_0524.py文件,你會有這樣的代碼

    class Migration(migrations.Migration): 
    
        dependencies = [ 
         ('testing', '0001_initial'), 
        ] 
    
        operations = [ 
          migrations.AddField(
          model_name='downloads', 
          name='display_order', 
          field=models.IntegerField(default=0), 
         ), 
         migrations.AlterField(
          model_name='draft_reports', 
          name='accepted_date', 
          field=models.DateTimeField(default=datetime.datetime(2015, 10, 27, 5, 24, 39, 588551), blank=True), 
         ), 
         migrations.AlterField(
          model_name='logentry_modified', 
          name='action_time', 
          field=models.DateTimeField(default=datetime.datetime(2015, 10, 27, 5, 24, 39, 548365)), 
         ), 
        ] 
    

    由於代碼顯示,它在數據庫中添加字段。您可以從這裏刪除創建問題的表格。

  2. 第二種可能的解決方案是,您可以刪除所有的遷移。然後運行命令再次創建遷移。您應該在添加新表之前執行此操作。它會創建0001_initial.py文件。然後添加新的模型並再次運行命令。然後運行'python manage.py migrate'。

希望它能解決您的問題。