我在模型中添加了一个字段,并通过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'无法解析。'
这意味着什么以及如何解决这个问题?我尝试过很多东西,但没有用。
提前致谢。
答案 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
目录中的文件。然后重新开始。