您的代码给人的印象是,除了发生的错误之外,您需要更多的帮助。这里是我的建议,就如何提高你的代码一般:
建设关系到用户模型的推荐方法是使用设置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