标签: django-migrations

Django manage.py:在依赖之前应用迁移

运行时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重置后,它都搞砸了.我还在学习迁移,所以我不明白什么是错的,因为在我看来这两个迁移都已经应用了.

谢谢您的帮助!

django django-admin django-manage.py django-migrations

21
推荐指数
4
解决办法
2万
查看次数

将ManyToManyField迁移为null tr​​ue,空白为true,无法识别

我做了一个模型改变

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

20
推荐指数
1
解决办法
8181
查看次数

添加已填充模型的非null和唯一字段

我的应用程序中有一个模型在一个带有几个条目的服务器中运行.我需要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)

django django-1.7 django-migrations

20
推荐指数
1
解决办法
7292
查看次数

使用RunPython进行更改的Django迁移

我想在我的一个模型中更改一个外键,该模型当前具有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.

如果这确实是原因 - 我如何确保更改反映在数据库中?如果不是 …

django django-migrations

20
推荐指数
2
解决办法
8300
查看次数

如何通过django中的迁移和数据向现有ManyToManyField添加选项

我无法在文档或在线中找到对特定问题的引用.

我有很多关系.

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模型创建新的迁移.我尝试通过orderingAuthorship表中添加列并在表中更改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')我认为还有其他因素会受到影响,从而导致错误.

我错过了什么?有没有其他方法可以解决这个问题?

django django-models django-migrations

20
推荐指数
2
解决办法
4426
查看次数

IntegrityError:从转储中恢复postgres后,具有ForeignKey的所有模型/字段的列"id"中的空值

我正在尝试使用来自我所拥有的本地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 …

django postgresql heroku django-migrations django-2.0

20
推荐指数
2
解决办法
4053
查看次数

如何使用Django migrate命令跳过迁移?

首先,我问的是1.7中引入的Django迁移,而不是south.

假设我有迁移001_add_field_x,002_add_field_y并且它们都应用于数据库.现在我改变主意并决定恢复第二次迁移并将其替换为另一次迁移003_add_field_z.

换句话说,我想申请001和003,跳过002,我该怎么做?

PS我知道我可以向后迁移到001,但是在我进行003迁移并执行迁移命令之后,001到003将全部应用,对吧?

python django django-models django-migrations

19
推荐指数
2
解决办法
2万
查看次数

ValueError:没有迁移的应用程序的依赖关系:customuser

我正在尝试使用框架django启动webproject,这是我的第一个web开发项目.

在创建项目之后,我试图创建一个创建自定义用户的应用程序,并使用django-registration进行电子邮件验证注册

我得到的结果manage runserver如下图所示:

PowerShell上的结果

这是我的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

17
推荐指数
3
解决办法
1万
查看次数

Django迁移和FileSystemStorage取决于设置

在我的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(参见下面的答案),但有更好的解决方案吗?

python django django-migrations

16
推荐指数
2
解决办法
1464
查看次数

Django 迁移与迁移图中的多个叶节点发生冲突

使用 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 django-migrations

16
推荐指数
1
解决办法
3万
查看次数