我正试图在django上建立一个博客。我一直在创造模型。下面是它们:
from django.db import models
import uuid
class Users(models.Model):
username = models.CharField(max_length = 32, primary_key = True)
password = models.CharField(max_length = 32)
email = models.EmailField()
registration_date = models.DateTimeField(auto_now_add = True)
class Posts(models.Model):
author = models.ForeignKey("Users")
header = models.CharField(max_length=100)
body = models.TextField()
pub_date = models.DateTimeField(auto_now_add = True)
mod_date = models.DateTimeField(auto_now = True)
upvotes = models.PositiveIntegerField()
views = models.PositiveIntegerField()
post_id = models.AutoField(primary_key = True)
class Answers(models.Model):
body = models.TextField()
author = models.ForeignKey("Users")
pub_date = models.DateTimeField(auto_now_add = True)
mod_date = models.DateTimeField(auto_now = True)
post = models.ForeignKey("Posts")
answer_id = models.UUIDField(primary_key = True, default=uuid.uuid4)在运行python manage.py migrate之后,我得到以下内容:
您正在尝试将非空字段“post_id”添加到没有默认设置的posts中;我们不能这样做(数据库需要mething来填充现有的行)。请选择一个修补程序: 1)立即提供一次性默认设置(将在所有现有行上设置)。 2)退出,让我在models.py中添加一个默认值
即使我按下1并尝试设置一个随机的一次性值,它也会成功地迁移,但是稍后在网站上会崩溃,“没有这样的表: blog_posts”。但是,我认为它应该在不需要手动设置默认值的情况下工作。
我试着用主键弹帖子和答案。我尝试完全删除它们,以便django自动设置它们,并尝试将其从AutoField更改为UUIDField,反之亦然,但没有帮助。我做错了什么?
发布于 2015-05-26 14:51:17
看到这个错误消息是因为django试图构建一个一致的迁移历史,它抱怨说,如果有一个数据库保存了旧迁移的数据,并且尝试添加一个非空字段,它就不知道该做什么了。
迁移应该放在版本控制中,并在不同的开发/生产环境中使用。如果您添加了一个不能为null的字段,则其他环境的现有数据(例如,一个包含没有字段post_id的模型的生产数据库),django将对此发出警告,并提供您得到的错误消息,并提供了两种解决方案:
如果您不在生产中,并且您的开发服务器上没有有价值的数据,那么修复此错误消息的一个简单方法就是删除现有的迁移文件并再次运行python manage.py makemigrations && python manage.py migrate。
https://stackoverflow.com/questions/30461940
复制相似问题