auth.user未解决错误django

时间:2017-10-06 09:33:43

标签: django django-models django-forms django-templates

我在模型中添加了一个字段,并通过foreignkey将其附加到django用户模型。

我的模特是:

colnames(mydata)[1] <- "Country"
library(ggplot2)
ggplot(mydata, aes(Quarter, Revenue, fill = Country)) +
    geom_bar(stat = "identity", position = "dodge") +
    scale_x_discrete(limits = unique(mydata$Quarter)) +
    theme(legend.position = "bottom") +
    guides(fill = guide_legend(nrow = 2))

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

  

'valuerror:相关模型'auth.user'无法解析。'

这意味着什么以及如何解决这个问题?我尝试过很多东西,但没有用。

提前致谢。

1 个答案:

答案 0 :(得分:0)

您的代码给人的印象是,除了发生的错误之外,您还需要更多帮助。以下是我对如何改进代码的建议:

  • 建议与用户模型建立关系的方法是使用设置AUTH_USER_MODEL。

  • 类名应按pascal case(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.您真的想要吗?您确定用户在表格中有一个带有此主键的条目吗?

编辑(2017-10-10):

如果您已经搞乱了迁移,可以手动清理它。在数据库中有一个表django_migrations,用于跟踪所有应用的迁移。它有四列:

-----------------------------
| id | app | name | applied |
-----------------------------

如果您使用MySQL,则可以使用以下命令检查应用程序的迁移:

SELECT * FROM django_migrations WHERE app = 'your_app';

删除此表中的条目以及导致问题的应用的migrations目录中的文件。然后重新开始。