我以这种方式在服务器上运行迁移:
sfield
即时模型Mobject
django.core.exceptions.FieldDoesNotExist: Mobject has no field named 'sfield'
失败的第一步结束和第三步结束之间有一些请求(很明显,因为django ORM无法从DB获取此字段但已经在Class中的字段,所以django将尝试要做到这一点)是否可以将所有3个步骤设为“原子”?或者全局忽略这个例外,因为现在我不需要sfield
,我只想要执行迁移而不需要例外。或者也许我可以通过某种方式临时标记新字段以防止django从数据库中获取它,但是对于makemigrations / migrate它必须是可见的吗?
答案 0 :(得分:1)
如果你select * from yourtable
,那么django会尝试获取模型中定义的所有字段。
您可以在自己的网站中使用only()来选择特定字段,这样在迁移orm尚未使用的新字段时不会引发任何异常
不过,您应该在本地创建迁移文件,测试本地计算机上的新字段,然后将迁移文件提交到服务器。在部署服务器时,您只需在部署后立即migrate
,这样可以缩短发生异常的时间。
来自django docs的:
有单独的命令可以制作和应用的原因 迁移是因为您将提交迁移到版本控制 系统并与您的应用程序一起发货;他们不仅让你的 开发更容易,它们也可供其他开发人员使用 生产