2017-10-06 91 views
0

我在模型中添加了一个字段,并通过foreignkey将其附加到django用户模型中。auth.user未解决错误django

我的模式是:

from django.db import models 
from django.contrib.auth.models import User 

    # Create your models here. 
    class user_files(models.Model): 
     Filename = models.CharField(max_length=50) 
     Browse = models.FileField() 
     Username = models.ForeignKey(User,default=1) 

,但在迁移时它给我的错误是:

'valuerror: related model 'auth.user' cannot be resolved.'

这是什么意思,如何解决?我尝试了很多东西,但没有奏效。

在此先感谢。

+1

该错误不是来自此代码。 –

+0

[Django migrations.AddField中外键的默认值]的可能重复(https://stackoverflow.com/questions/36280253/default-value-for-foreign-key-in-django-migrations-addfield) –

+1

首次运行makemigration和migrate命令,在models.py中没有任何字段,然后在将某些内容放置在models.py中后再次运行这些命令。 – amrit

回答

0

您的代码给人的印象是,除了发生的错误之外,您需要更多的帮助。这里是我的建议,就如何提高你的代码一般:

  • 建设关系到用户模型的推荐方法是使用设置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目录的你应用程序,这是造成问题。然后重新开始。

+0

HI SIR, 我删除了模型中的所有条目,并从模型中删除了foreignkey列。但是现在在迁移它时说没有检测到变化,并且在本地主机上运行时,它会将错误报告为'没有这样的列:Box_user_files.Username_id' –

+0

请参阅我关于迁移的编辑。 – cezar