无法分配“<class 'django.contrib.auth.models.User'>”:“Model.user”必须是“User”实例

Posted

技术标签:

【中文标题】无法分配“<class \'django.contrib.auth.models.User\'>”:“Model.user”必须是“User”实例【英文标题】:Cannot assign "<class 'django.contrib.auth.models.User'>": "Model.user" must be a "User" instance无法分配“<class 'django.contrib.auth.models.User'>”:“Model.user”必须是“User”实例 【发布时间】:2020-05-28 08:10:05 【问题描述】:

创建模型的第一个条目会引发错误

我执行了以下命令进行迁移

manage.py makemigrations
manage.py migrate

在我发出这些命令在数据库中创建第一个“数据”之后,一切正常

manage.py shell
from sms.models import Post
from django.contrib.auth.models import User
post_1 = Post(name="testname", email="testemail", gender="Monsieur", number="23233", author=User)

它给了我这个错误:

ValueError: Cannot assign "<class 'django.contrib.auth.models.User'>": "Post.author" must be a "User" instance.

models.py 文件

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

THE_GENDER = [
    ("Monsieur", "Monsieur"),
    ("Madame", "Madame")
]


class Post(models.Model):


    name = models.CharField(max_length=100)
    email = models.CharField(max_length=100)
    gender = models.CharField(max_length=8, choices=THE_GENDER)
    number = models.CharField(max_length=100)
    author = models.ForeignKey(User, on_delete=models.CASCADE)

    def __str__(self):
        return self.name


【问题讨论】:

【参考方案1】:

您看到此错误是因为您尝试将类对象分配给author 属性。但它假设是用户实例。所以你应该先创建用户记录并使用它,而不是这样:

user = User.objects.create_user(username="name", email="email@mail.com", password="Pass12345")
post_1 = Post(name="testname", email="testemail", gender="Monsieur", number="23233", author=user)

您可以将模型类视为数据库表。而模型实例代表该表中的记录。

【讨论】:

谢谢它成功了,我可以在我的数据库中看到数据,但是现在当我打开我的网页应用程序并在 fied 上添加文本并按下提交按钮时,它给了我这个错误django.db.utils.IntegrityError: NOT NULL constraint failed: sms_post.author_id @tiberhockey 欢迎您!至于您的网页,您需要在保存表单之前注入用户,请查看此答案了解详情:***.com/a/42482597/641249

以上是关于无法分配“<class 'django.contrib.auth.models.User'>”:“Model.user”必须是“User”实例的主要内容,如果未能解决你的问题,请参考以下文章

linux系统无法分配内存

为啥我收到“无法分配给操作员”错误?

无法足够快地分配内存?

Angular 5 - 无法分配类属性

django - 无法分配外键

是啥导致 PHP 中的“无法为池分配内存”?