【问题标题】:You are trying to add a non-nullable field 'post' to stream without a default; we can't do that您正在尝试在没有默认值的情况下将不可为空的字段“post”添加到流中;我们不能那样做
【发布时间】:2021-09-06 17:52:14
【问题描述】:

我有 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 谢谢!

【问题讨论】:

    标签: python django signals


    【解决方案1】:

    您可能更改了模型,而其中已有数据

    您可以选择:

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

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

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

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

    【讨论】:

    • 谢谢,兄弟,我选择了 b(删除迁移),现在可以使用了。
    • 很高兴为您提供帮助 :),您可以接受答案和/或投票,
    猜你喜欢
    • 2021-11-16
    • 1970-01-01
    • 2021-06-21
    • 2016-01-04
    • 2020-07-12
    • 2020-06-03
    • 1970-01-01
    • 2021-08-25
    • 2017-10-09
    相关资源
    最近更新 更多