用户作为Django中的外键

rvpgvaaj  于 2023-02-10  发布在  Go
关注(0)|答案(2)|浏览(127)

我的www.example.com文件中包含以下内容models.py:

class Film(models.Model):
    title = models.CharField(max_length=200)
    director = models.CharField(max_length=200)
    description = models.CharField(max_length=200)
    pub_date = models.DateField('date published')

class Comment(models.Model):
    film = models.ForeignKey(Film, on_delete=models.CASCADE)
    body = models.CharField(max_length=200)

当我登录Django管理时,我添加了一些电影,然后添加了一些评论,选择评论所涉及的电影对象。然后我也通过管理面板创建了一些用户。
我希望我的关系是:
电影可以有很多评论/评论属于电影
用户可以有许多评论/评论属于用户
我想,就像评论和电影一样,我只需要将user定义为comment的外键,我正在努力做到这一点,我正在学习Django tutorials,但我看不到关于如何将其他表链接到用户的教程。
我以为我能做这样的事:

user = models.ForeignKey(User, on_delete=models.CASCADE)

导入用户时,如下所示:

from django.contrib.auth.models import User

目前的结果是,如果保留user = models.ForeignKey(User, on_delete=models.CASCADE),则会得到err_connection_rejected

jecbmhm3

jecbmhm31#

也许你已经改变了设置中的默认用户模式?
您应该在注解模型中使用user = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE),而不是直接将User与外键一起使用,如下所示

class Comment(models.Model):
    film = models.ForeignKey(Film, on_delete=models.CASCADE)
    body = models.CharField(max_length=200)
    user = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)

您需要应用迁移才能将用户添加到注解python manage.py makemigrationspython manage.py migrate
如果在应用迁移时,shell会显示一条消息,告知 You are trying to add an non-null field 'user' to comment(您正在尝试将一个不可为空的字段'user'添加到注解中,但没有默认值)
您有2个选项
1.跳过迁移并向模型中的字段添加默认值,或者将属性设置为可空,无论您需要什么,即
user = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE, null=True, blank=True)
并再次应用迁移
1.或为新字段选择默认值,该值应为数据库中现有用户的ID
这是因为django应该填充数据库中现有的记录,如果存在的话

khbbv19g

khbbv19g2#

使用**“设置。AUTH_USER_MODEL”
因此,从
“django.conf”导入“设置”,然后使用“设置.AUTH_USER_MODEL”**,如下所示:

from django.db import models
from django.conf import settings # Here

class Comment(models.Model):
    film = models.ForeignKey(Film, on_delete=models.CASCADE)
    body = models.CharField(max_length=200)
                            # Here
    user = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)

相关问题