用户在Django中作为外键

时间:2018-01-25 00:08:25

标签: python django

我在models.py文件中有以下内容:

const mapStateToProps = (state, ownProps) => {
  return {
    packages: state.get('packages'),
    results: !state.getIn(['packages','packages','results']) ? List() : state.getIn(['packages','packages','results'])
  };
}

当我登录Django管理员时,我添加了一些电影,然后添加了一些评论,选择评论相关的电影对象。然后我通过管理面板创建了几个用户。

我希望我的关系是:

电影可以有很多评论/评论属于电影

用户可以拥有许多评论/评论属于用户

我认为,就像评论和电影一样,我只需要将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) 定义为user的外键。我正在努力做到这一点。我正在研究Django tutorials,但我看不到有关如何将其他表格链接到用户的教程。

我以为我可以做这样的事情:

comment

像这样导入用户:

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

目前的结果是如果我保持from django.contrib.auth.models import User 我得到err_connection_refused

1 个答案:

答案 0 :(得分:2)

您是否在设置中更改了默认用户模型?

您应该在评论模型中使用User,而不是直接使用外键user = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE),如下所示

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)

您需要应用迁移才能将用户添加到Comment, python manage.py makemigrations python manage.py migrate

如果您正在应用迁移,那么shell会显示一条消息告诉您正在尝试添加一个不可为空的字段“user”进行评论而不使用默认

您有2个选项

  1. 跳过迁移并向模型中的字段添加默认值或将属性设置为可为空,无论您需要什么 即
  2. user = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE, null=True, blank=True)

    再次应用迁移

    1. 或者为新字段选择默认值,应该是databse
    2. 中现有用户的ID

      这是因为django应该填充数据库中的现有记录(如果存在)