运行时python manage.py migrate遇到此错误:
django.db.migrations.exceptions.InconsistentMigrationHistory: Migration
<appname>.0016_auto_<date2>_<time2> is applied before its dependency
<appname>.0001_squashed_0015_auto_<date1>_<time1>
Run Code Online (Sandbox Code Playgroud)
运行showmigrations返回:
<appname>
[X] 0001_squashed_0015_auto_<date1>_<time1> (15 squashed migrations)
[X] 0016_auto_<date2>_<time2>
[ ] 0017_<modelname>_squashed_0019_auto_<date3>_<time3> (3 squashed migrations)
Run Code Online (Sandbox Code Playgroud)
我昨天尝试了django-extensions,当我运行一些直接的SQL查询并且使用git重置后,它都搞砸了.我还在学习迁移,所以我不明白什么是错的,因为在我看来这两个迁移都已经应用了.
谢谢您的帮助!
我做了一个模型改变
standard = models.ManyToManyField(Standard)
Run Code Online (Sandbox Code Playgroud)
至
standard = models.ManyToManyField(Standard, blank=True, null=True)
Run Code Online (Sandbox Code Playgroud)
此应用程序的南模式迁移无法识别更改?
类似于这个问题,这个问题没有得到解决: 南方迁移和许多可能领域的变化
django django-models database-schema django-south django-migrations
我的应用程序中有一个模型在一个带有几个条目的服务器中运行.我需要SlugField为此模型添加唯一且非null.在SlugField将基于被填充trading_name.我已经更改了我的模型以添加这个新字段和修改后的保存方法:
class Supplier(StatusModel):
SLUG_MAX_LENGTH = 210
slug = models.SlugField(unique=True, max_length=SLUG_MAX_LENGTH)
trading_name = models.CharField(max_length=200, verbose_name=_('trading name'))
...
def save(self, *args, **kwargs):
self.slug = orig = slugify(self.trading_name)[:Supplier.SLUG_MAX_LENGTH]
for x in itertools.count(1):
if not Supplier.objects.filter(slug=self.slug).exists():
break
# Truncate the original slug dynamically. Minus 1 for the hyphen.
self.slug = "%s-%d" % (orig[:Supplier.SLUG_MAX_LENGTH - len(str(x)) - 1], x)
self.full_clean()
super(Supplier, self).save(*args, **kwargs)
Run Code Online (Sandbox Code Playgroud)
改变模型后,我跑了 manage.py makemigrations并将此迁移作为输出:
class Migration(migrations.Migration):
dependencies = [
('opti', '0003_auto_20141226_1755'),
]
operations = [
migrations.AddField( …Run Code Online (Sandbox Code Playgroud) 我想在我的一个模型中更改一个外键,该模型当前具有NULL值,不能为空.
我null=True从我的字段中删除并运行makemigrations
因为我正在改变一个已经包含该字段中包含NULL值的行的表,所以我被要求立即提供一次性值或编辑迁移文件并添加RunPython操作.
我的RunPython操作在AlterField操作之前列出,并对此字段执行所需的更新,因此它不包含NULL值(仅包含已包含NULL值的行).
但是,迁移仍然失败并出现此错误:
django.db.utils.OperationalError: cannot ALTER TABLE "my_app_site" because it has pending trigger events
这是我的代码:
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.db import models, migrations
def add_default_template(apps, schema_editor):
Template = apps.get_model("my_app", "Template")
Site = apps.get_model("my_app", "Site")
accept_reject_template = Template.objects.get(name="Accept/Reject")
Site.objects.filter(template=None).update(template=accept_reject_template)
class Migration(migrations.Migration):
dependencies = [
('my_app', '0021_auto_20150210_1008'),
]
operations = [
migrations.RunPython(add_default_template),
migrations.AlterField(
model_name='site',
name='template',
field=models.ForeignKey(to='my_app.Template'),
preserve_default=False,
),
]
Run Code Online (Sandbox Code Playgroud)
如果我理解正确,当字段被更改为不可为空但字段包含空值时,可能会发生此错误.在这种情况下,我能想到为什么会发生这种情况的唯一原因是因为RunPython操作事务在运行之前没有"提交"数据库中的更改AlterField.
如果这确实是原因 - 我如何确保更改反映在数据库中?如果不是 …
我无法在文档或在线中找到对特定问题的引用.
我有很多关系.
class Books(models.Model):
name = models.CharField(max_length=100)
class Authors(models.Model):
name = models.CharField(max_length=100)
books = models.ManyToManyField(Books)
Run Code Online (Sandbox Code Playgroud)
这有迁移和数据.现在我需要使用through选项,以便在表中添加一个包含多对多关系的额外字段.
class Authorship(models.Model):
book = models.ForeignKey(Books)
author = models.ForeignKey(Authors)
ordering = models.PositiveIntegerField(default=1)
class Authors(models.Model):
name = models.CharField(max_length=100)
books = models.ManyToManyField(Books, through=Authorship)
Run Code Online (Sandbox Code Playgroud)
当我运行迁移时,django会为Authorship模型创建新的迁移.我尝试通过ordering在Authorship表中添加列并在表中更改books列来手动创建迁移文件,Authors但是我遇到了一些迁移问题.
operations = [
migrations.AddField(
model_name='authorship',
name='ordering',
field=models.PositiveIntegerField(default=1),
),
migrations.AlterField(
model_name='authors',
name='books',
field=models.ManyToManyField(to='app_name.Books', through='app_name.Authorship'),
),
]
Run Code Online (Sandbox Code Playgroud)
在尝试迁移时,KeyError: ('app_name', u'authorship')我认为还有其他因素会受到影响,从而导致错误.
我错过了什么?有没有其他方法可以解决这个问题?
我正在尝试使用来自我所拥有的本地postgres数据库的恢复的heroku postgres数据存储区.使用恢复的postgres数据库Django正常运行.它检索所有对象并使用它们的字段,primay key等,没有任何问题.
但是当涉及到写入数据库时,无论模型如何,我都会得到相同的错误.
psycopg2.IntegrityError:列"id"中的空值违反非空约束
当我重置heroku数据库并从空白平板创建对象时,没有问题.但是,如果我尝试在已恢复的数据库上创建任何对象,我总是会得到这个null value in column "id" violates not-null constraint
这是在Django Admin中尝试创建基本模型的复制/粘贴堆栈跟踪.我选择了这个模型示例,因为没有与创建它相关的其他代码.没有信号或任何东西.
Django版本:2.0 Python版本:3.6.3
追溯:
在_execute 85中输入文件"/app/.heroku/python/lib/python3.6/site-packages/django/db/backends/utils.py".返回self.cursor.execute(sql,params)
上面的异常(列"id"中的空值违反了非空约束DETAIL:失败行包含(null,Special Class,special-class).)是以下异常的直接原因:
文件"/app/.heroku/python/lib/python3.6/site-packages/django/core/handlers/exception.py"在内部35. response = get_response(request)
_get_response 128中的文件"/app/.heroku/python/lib/python3.6/site-packages/django/core/handlers/base.py".response = self.process_exception_by_middleware(e,request)
_get_response 126中的文件"/app/.heroku/python/lib/python3.6/site-packages/django/core/handlers/base.py".response = wrapped_callback(request,*callback_args,**callback_kwargs)
在包装器574中输入"/app/.heroku/python/lib/python3.6/site-packages/django/contrib/admin/options.py".返回self.admin_site.admin_view(查看)(*args,**kwargs )
_wrapped_view中的文件"/app/.heroku/python/lib/python3.6/site-packages/django/utils/decorators.py"142.response = view_func(request,*args,**kwargs)
_wrapped_view_func中的文件"/app/.heroku/python/lib/python3.6/site-packages/django/views/decorators/cache.py"44.response = view_func(request,*args,**kwargs)
内部223.文件"/app/.heroku/python/lib/python3.6/site-packages/django/contrib/admin/sites.py"返回视图(request,*args,**kwargs)
在add_view 1553中输入文件"/app/.heroku/python/lib/python3.6/site-packages/django/contrib/admin/options.py".返回self.changeform_view(request,None,form_url,extra_context)
在_wrapper 62中输入文件"/app/.heroku/python/lib/python3.6/site-packages/django/utils/decorators.py".返回bound_func(*args,**kwargs)
_wrapped_view中的文件"/app/.heroku/python/lib/python3.6/site-packages/django/utils/decorators.py"142.response = view_func(request,*args,**kwargs)
在bound_func 58中输入文件"/app/.heroku/python/lib/python3.6/site-packages/django/utils/decorators.py".return func.get(self,type(self))(*args2,**kwargs2)
在changeform_view 1450中输入文件"/app/.heroku/python/lib/python3.6/site-packages/django/contrib/admin/options.py".return self._changeform_view(request,object_id,form_url,extra_context)
_changeform_view 1490中的文件"/app/.heroku/python/lib/python3.6/site-packages/django/contrib/admin/options.py".self.save_model(request,new_object,form,not add)
在save_model 1026中输入文件"/app/.heroku/python/lib/python3.6/site-packages/django/contrib/admin/options.py".obj.save()
保存729中的文件"/app/.heroku/python/lib/python3.6/site-packages/django/db/models/base.py".force_update = force_update,update_fields = update_fields)
在save_base 759中输入文件"/app/.heroku/python/lib/python3.6/site-packages/django/db/models/base.py".更新= self._save_table(raw,cls,force_insert,force_update,using, update_fields)
在_save_table 842中输入文件"/app/.heroku/python/lib/python3.6/site-packages/django/db/models/base.py".结果= self._do_insert(cls._base_manager,using,fields,update_pk,生的)
在_do_insert 880中输入文件"/app/.heroku/python/lib/python3.6/site-packages/django/db/models/base.py".using = using,raw …
首先,我问的是1.7中引入的Django迁移,而不是south.
假设我有迁移001_add_field_x,002_add_field_y并且它们都应用于数据库.现在我改变主意并决定恢复第二次迁移并将其替换为另一次迁移003_add_field_z.
换句话说,我想申请001和003,跳过002,我该怎么做?
PS我知道我可以向后迁移到001,但是在我进行003迁移并执行迁移命令之后,001到003将全部应用,对吧?
我正在尝试使用框架django启动webproject,这是我的第一个web开发项目.
在创建项目之后,我试图创建一个创建自定义用户的应用程序,并使用django-registration进行电子邮件验证注册
我得到的结果manage runserver如下图所示:
这是我的models.py文件包含的内容
from django.db import models
from django.contrib.auth.models import AbstractUser
from django.utils.translation import ugettext_lazy as _
class User(AbstractUser):
username = models.CharField(max_length=255, unique=True, verbose_name=_("Username"))
email = models.EmailField(unique=True, verbose_name=_("Email Address"))
favorite_animal = models.CharField(max_length=255, verbose_name=_("Favorite Animal"))
Run Code Online (Sandbox Code Playgroud) python django unhandled-exception python-3.x django-migrations
在我的Django应用程序中,我使用了FileSystemStorage生成的文件.我像这样初始化它:
import os
from urlparse import urljoin
from django.conf import settings
from django.core.files.storage import FileSystemStorage
gen_files_storage = FileSystemStorage(location=os.path.join(settings.MEDIA_ROOT, 'generated/'), base_url=urljoin(settings.MEDIA_URL, 'generated/'))
Run Code Online (Sandbox Code Playgroud)
当我想创建一个新文件时,我使用:
from django.core.files.base import ContentFile
from django.db import models
def next_number():
# num = ...
return num
gen_file = models.FileField(storage=gen_files_storage)
gen_file.save('file%s.txt' % next_number(), ContentFile(''))
Run Code Online (Sandbox Code Playgroud)
这很好.唯一的问题是FileSystemStorageDjango迁移中的路径是"硬编码".因为我使用不同的设置进行开发(更改)和生产,所以manage.py makemigrations命令通常只会因为路径发生变化而生成迁移,尽管数据库中的所有内容都保持不变.
我知道有一个使用子类的解决方案FileSystemStorage(参见下面的答案),但有更好的解决方案吗?
使用 Django 1.11.22 我正在尝试运行迁移
python manage.py migrate
django.db.migrations.exceptions.InconsistentMigrationHistory: Migration base.0036_auto_20190227_1226 is applied before its dependency base.0027_auto_20170801_1228_squashed_0037_auto_20190222_1347 on database 'default'.
Run Code Online (Sandbox Code Playgroud)
我第一次尝试解决这个问题是
sudo -u postgres psql -d albatros -c \
"DELETE FROM django_migrations WHERE name = '0036_auto_20190227_1226' AND app = 'base'"
Run Code Online (Sandbox Code Playgroud)
希望从迁移表中删除迁移可以修复它。不幸的是我现在得到:
CommandError: Conflicting migrations detected; multiple leaf nodes in the migration graph: (0037_auto_20190222_1347, 0036_auto_20190227_1226 in base).
To fix them run 'python manage.py makemigrations --merge'
Run Code Online (Sandbox Code Playgroud)
当尝试 makemigrations --merge 时,它没有找到任何要合并的迁移。这就是 showmigrations 的样子:
./manage.py showmigrations base
base
[X] 24_initial
[X] 24_to_26
[X] 26_to_27
[X] …Run Code Online (Sandbox Code Playgroud) django ×10
python ×3
django-1.7 ×1
django-2.0 ×1
django-admin ×1
django-south ×1
heroku ×1
postgresql ×1
python-3.x ×1