您的代碼給人的印象是,除了發生的錯誤之外,您需要更多的幫助。這裏是我的建議,就如何提高你的代碼一般:
建設關係到用戶模型的推薦方法是使用設置AUTH_USER_MODEL。
類名應按pascal案例(PascalCase)和單數形式約定。
在蛇情況下(snake_case),變量名應該按照約定俗成。
因此您的代碼可以增強這樣的:
from django.conf import settings
from django.db import models
class UserFile(models.Model):
filename = models.CharField(max_length=50)
browse = models.FileField()
username = models.ForeignKey(settings.AUTH_USER_MODEL)
命名是一個極端重要的課題。你應該命名你的類,方法,屬性非常有意義。對於外鍵字段使用username
不是很具描述性。該變量不包含用戶名的值,而是整個User對象。有一個字段filename
也非常令人困惑,因爲FileField
實際上將文件路徑以及文件名作爲字符串(varchar)保存在數據庫中。
代碼被寫入一次,但多次讀取。讀者不清楚你的意圖。
如果在遷移此模型後添加字段username
,則需要前兩個變體:必需字段或可選字段。
如果它應該是一個可選字段,可以讓NULL:
username = models.ForeignKey(settings.AUTH_USER_MODEL, null=True)
然後運行:
python manage.py makemigrations
python manage.py migrate
這是更簡單的方法。但是,如果此字段是必需的,則遷移需要知道應將哪個值分配給表中的當前條目,並會交互式地要求您添加默認值。這與指定默認值作爲選項不同。
在你的情況下,它意味着未明確指定用戶名的所有未來條目將具有值1.你真的想要嗎?你確定用戶在表中有這個主鍵的條目嗎?
EDIT(2017年10月10日):
如果你已經與遷移混亂,你可以手動清理。在數據庫中有一個表django_migrations
,它跟蹤所有應用的遷移。它有四列:
-----------------------------
| id | app | name | applied |
-----------------------------
如果你使用MySQL,你可以檢查遷移與命令你的應用程序:
SELECT * FROM django_migrations WHERE app = 'your_app';
刪除該表中的條目和文件的migrations
目錄的你應用程序,這是造成問題。然後重新開始。
該錯誤不是來自此代碼。 –
[Django migrations.AddField中外鍵的默認值]的可能重複(https://stackoverflow.com/questions/36280253/default-value-for-foreign-key-in-django-migrations-addfield) –
首次運行makemigration和migrate命令,在models.py中沒有任何字段,然後在將某些內容放置在models.py中後再次運行這些命令。 – amrit