python - 您正在尝试在没有默认值的情况下将不可为空的字段“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”添加到流中;我们不能这样做(数据库需要一些东西来填充现有的行)。请选择一个修复:
- 现在提供一次性默认值(将在所有现有行上设置此列的空值)
- 退出,让我在 models.py 中添加一个默认值 选择一个选项:
如何解决?我把默认smth。但是在函数add_post我添加了date=post.posted 谢谢!
解决方案
你可能改变了你的模型,而它已经有数据了
您可以选择:
一种。从该模型中删除数据并重新进行迁移,或者
湾。删除迁移和 sqlite 文件并重新进行迁移,或者
C。通过键入 1 选择“立即提供一次性默认值”,然后添加一个随机的现有 ID 号(但它可能会弄乱您的数据),或者
d。将 blank=True,null=True 添加到模型中的所有字段并重新进行迁移,
推荐阅读
- sql - 将执行字符串的结果存储到临时表中
- django - 在 Django 中中止长时间运行的请求
- algorithm - 最小生成树 (MST) 算法变体
- triggers - GitLab 管道标签停止触发仅标记的阶段:标签
- modelica - 如何在参数对话框中添加空格
- spring-data-jpa - 如何使用 @Param 注释将值传递给方法
- c# - 处理来自绑定 MVVM 属性的未捕获异常
- firebase - Firebase 规则,只允许儿童写入
- laravel - 如何在 Laravel 6 中使用 Elequent 模型删除一行而不影响引用表?
- html - 使用引导程序在 CSS 中设置嵌套项的样式