gpt4 book ai didi

python - Django 迁移

转载 作者:行者123 更新时间:2023-11-28 16:32:36 29 4
gpt4 key购买 nike

我正在尝试在 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 后,我得到以下信息:

You are trying to add a non-nullable field 'post_id' to posts without a default; we can't do that (the database need mething to populate existing rows). Please select a fix:
1) Provide a one-off default now (will be set on all existing rows)
2) Quit, and let me add a default in models.py

即使我按 1 并尝试设置一个随机的一次性值,它也会成功迁移,但后来网站崩溃并显示“没有这样的表:blog_posts”。但我认为它应该可以在没有手动设置默认值等变通方法的情况下工作。

我尝试使用主键来显示帖子和答案。我尝试完全删除它们,以便 django 自动设置它们并尝试将其从 AutoField 更改为 UUIDField,反之亦然,但它没有帮助。我做错了什么?

最佳答案

您看到此错误消息是因为 django 正在尝试建立一个一致的迁移历史记录,并且它会提示说如果有一个数据库保存您的旧迁移数据,并且您会尝试添加一个不可为空的领域,它不知道该怎么做。

迁移应该置于版本控制中并在不同的开发/生产环境中使用。如果你添加一个不能为 null 的字段,其他环境的现有数据(例如,生产数据库包含没有字段 post_id 的模型),那么 django 会警告你这个,用您收到的错误消息,并提供两种解决方案:

  1. 此字段应始终预填充默认值(您必须修改 models.py)

  2. 这是一次性迁移,您提供一次性值,例如“LEGACY”以标记迁移前数据。

如果您不在生产环境中并且您的开发服务器上没有有值(value)的数据,修复此错误消息的一种简单方法是删除现有的迁移文件并运行 python manage.py makemigrations && python manage .py 再次迁移

关于python - Django 迁移,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30461940/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com