首页 > 解决方案 > 您正在尝试在没有默认值的情况下将不可为空的字段“post”添加到流中;我们不能那样做

问题描述

我有models.py

  class Stream(models.Model):

        following = models.ForeignKey(User, on_delete=models.CASCADE, 
        related_name='stream_following')
        user = models.ForeignKey(User, on_delete=models.CASCADE)
        post = models.ForeignKey(Post, on_delete=models.CASCADE)
        date = models.DateTimeField()

和功能

  def add_post(sender, instance, *args, **kwargs):

    post = instance 
    user = post.user 
    followers = Follow.objects.all().filter(following=user)
    for follower in followers:
        stream = Stream(post=post, user=follower.follower, date=post.posted, following=user)
        stream.save()

当我尝试命令py manage.py makemigrations时, 我遇到了问题。

您正在尝试在没有默认值的情况下将不可为空的字段“post”添加到流中;我们不能这样做(数据库需要一些东西来填充现有的行)。请选择一个修复:

  1. 现在提供一次性默认值(将在所有现有行上设置此列的空值)
  2. 退出,让我在 models.py 中添加一个默认值 选择一个选项:

如何解决?我把默认smth。但是在函数add_post我添加了date=post.posted 谢谢!

标签: pythondjangosignals

解决方案


你可能改变了你的模型,而它已经有数据了

您可以选择:

一种。从该模型中删除数据并重新进行迁移,或者

湾。删除迁移和 sqlite 文件并重新进行迁移,或者

C。通过键入 1 选择“立即提供一次性默认值”,然后添加一个随机的现有 ID 号(但它可能会弄乱您的数据),或者

d。将 blank=True,null=True 添加到模型中的所有字段并重新进行迁移,


推荐阅读