2017-06-28 45 views
3

創建的ImageField我在models.py增加了一個新的ImageField:Django不上的Postgres

class User(AbstractUser): 
    [more_fields_here] 
    profile_picture = models.ImageField(upload_to='profile_pictures', null=True) 

我跑python manage.py makemigrations然後python manage.py migrate沒有任何錯誤。

但是當我運行我的應用程序我得到:

ProgrammingError at column authentication_user.profile_picture does not exist 

我Postgres數據庫檢查和列profile_picture不存在。

我刪除了遷移,並再次嘗試,但我仍然收到相同的錯誤。

migrations/0001_initial.py有行:

('profile_picture', models.ImageField(null=True, upload_to='profile_pictures')), 

但爲什麼列表中的存在嗎?

+1

您是否可能手動修改您的遷移文件?我懷疑Django認爲'0001_initial'已經被遷移了,這就是爲什麼它不添加這個字段。我還建議嘗試'python manage.py migrate appname zero'來回滾所有遷移,然後再次運行'python manage.py migrate'。 – Kamil

+0

您是否已將['AUTH_USER_MODEL'](https://docs.djangoproject.com/en/1.11/ref/settings/#std:setting-AUTH_USER_MODEL)設置爲您的自定義用戶模型?你在數據庫中看到'[more_fields_here]'字段嗎? – Chris

+0

@Chris,我可以確認我已經設置了''AUTH_USER_MODEL''。所有其他字段都按預期在數據庫中。問題只在於這個領域。 – Galil

回答

1

它看起來像是與遷移混淆的東西,不建議手動修改遷移文件。 Django存儲已應用遷移的信息,如果修改已應用的0001遷移並再次運行migrate,那些修改將不會應用。當然我不知道這到底是怎麼發生的,但是看起來profile_picture字段是在應用了0001之後添加的。

最簡單的方法來解決這個問題(沒有rollbacking任何遷移):

  1. 刪除字段profile_picture0001遷移
  2. 運行makemigrations再(0002新領域profile_picture應創建)
  3. 運行migrate