标签: django-migrations

Django迁移多个数据库

我很难创建数据迁移.我为我的应用程序使用两个数据库.我在settings.py中配置了数据库,并在Django docs中创建了一个路由器.

# settings.py
DB_HOST = 'localhost'
DATABASES = {
'default': {
    'ENGINE': 'django.db.backends.mysql',
    'NAME': 'helios',
    'HOST': DB_HOST,
    'OPTIONS': {
        'read_default_file': join(dirname(__file__), 'default.cnf'),
    },
},
'other': {
    'ENGINE': 'django.db.backends.mysql',
    'NAME': 'gala_pol',
    'HOST': DB_HOST,
    'OPTIONS': {
        'read_default_file': join(dirname(__file__), 'other.cnf'),
    },
},

DATABASE_APPS_MAPPING = {
    'contenttypes': 'default',
    'auth': 'default',
    'admin': 'default',
    'sessions': 'default',
    'messages': 'default',
    'staticfiles': 'default',
    'woodsmen': 'default',
    'helios': 'default',
    'hush': 'default',
    'hunt': 'other',
    'meat': 'other',
    'beast': 'other',
}

# routers.py

class DatabaseAppsRouter(object):

    def db_for_read(self, model, **hints):

        if model._meta.app_label in …
Run Code Online (Sandbox Code Playgroud)

django django-migrations

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

为什么Django会为代理模型创建迁移文件?

我刚刚创建了一个代理模型,并且惊讶于manage.py makemigrations创建了一个带有migrations.CreateModel操作的新迁移文件.

代理模型不会创建新的数据库表,它只是同一数据集的不同python接口,并且实际上不manage.py sqlmigrate my_app_label 0042返回任何内容.

我认为它可能用于创建代理模型,ContentType但如果它们不存在则按需创建.

它是否用于触发代理模型权限的创建?代理模型权限有一个6岁的开放式bug,所以我不确定这个部分应该如何工作...

它用来Django 1.8测试这个.

编辑:澄清一下,Django创建一个对新代理模型没有任何作用的迁移,所以Django如果它没有用,我们不想在第一时间创建迁移吗?

是否存在迁移有用的用例?

python django proxy-classes django-migrations

15
推荐指数
2
解决办法
2004
查看次数

测试中的模型 - Django 1.7问题

我正在尝试移植我的项目以使用Django 1.7.一切都很好,除了一件事.测试文件夹内的模型.

Django 1.7新迁移在内部运行migrate命令.在syncdb运行之前.这意味着如果模型未包含在迁移中 - 它将不会填充到DB(以及测试数据库).这正是我现在所经历的.

我所做的是:

在我的/app/tests/models.py虚拟模型中:class TestBaseImage(BaseImage): pass 它所做的只是从抽象 BaseImage模型继承.

然后在测试中我创建该虚拟模型的实例来测试它.

问题是它不再起作用了.它不包含在迁移中(这很明显,因为我不想将我的测试模型保存在生产数据库中).运行我的测试会导致DB错误table does not exist.这是有道理的,因为它不包含在迁移中.

有没有办法让它适用于新的迁移系统?我找不到一种"修复"的方法.

我使用的代码:

应用程序/测试/ models.py

from ..models import BaseImage


class TestBaseImage(BaseImage):
    """Dummy model just to test BaseImage abstract class"""
    pass
Run Code Online (Sandbox Code Playgroud)

应用程序/ models.py

class BaseImage(models.Model):
    # ... fields ...
    class Meta:
        abstract = True
Run Code Online (Sandbox Code Playgroud)

工厂:

class BaseImageFactory(factory.django.DjangoModelFactory):
    """Factory class for Vessel model"""
    FACTORY_FOR = BaseImage
    ABSTRACT_FACTORY = True


class PortImageFactory(BaseImageFactory):
    FACTORY_FOR = PortImage
Run Code Online (Sandbox Code Playgroud)

示例测试:

def get_model_field(model, field_name):
    """Returns …
Run Code Online (Sandbox Code Playgroud)

python django django-testing django-1.7 django-migrations

14
推荐指数
1
解决办法
1589
查看次数

Django Sites Framework:初始数据迁移位置

在Django 1.7之前,当使用Django Sites Framework时,可以/应该使用Initial Fixtures定义初始数据.

的myproject /装置/ initial_data.json

[
{
    "pk": 1, 
    "model": "sites.site", 
    "fields": {
        "domain": "domain1", 
        "name": "name1"
    }
},
{
    "pk": 2, 
    "model": "sites.site", 
    "fields": {
        "domain": "domain2", 
        "name": "name2"
    }
},
{
    "pk": 3, 
    "model": "sites.site", 
    "fields": {
        "domain": "domain3", 
        "name": "name3"
    }
}
]
Run Code Online (Sandbox Code Playgroud)

由于它是一个全局项目设置,我在项目根目录中添加了一个"fixtures"文件夹,并将其添加到FIXTURE_DIRS.

# Used to search fixture files directories.
# Fixture files are files that provide initial data to be
# inserted in the database. (>python manage.py loaddata) …
Run Code Online (Sandbox Code Playgroud)

django-sites django-fixtures django-migrations

14
推荐指数
2
解决办法
3096
查看次数

使用Django 1.7迁移删除应用程序

我想知道什么是使用Django迁移删除所删除应用程序的所有表的最简洁方法.例如,如果我安装了一个新软件包,我将应用程序添加到我的settings.py中,然后执行manage.py makemigrations和manage.py migrate; 当我决定我不想使用这个包并将其从我的settings.py中删除时,命令manage.py makemigrations将告诉我"未检测到任何更改",因此manage.py migrate将无能为力,但我需要删除此删除的应用程序创建的表.

我期望Django迁移处理这个,所以如果我删除一个应用程序,它也会创建迁移以删除所有必要的表.

django django-migrations

14
推荐指数
2
解决办法
5842
查看次数

在迁移中添加django管理员权限:不存在权限匹配查询

我想在手动编写的迁移中添加一些组并为其分配权限,但如果我在干净的DB上运行它,则只有在运行所有迁移后才会创建权限.

我找到了这张票:https: //code.djangoproject.com/ticket/23422但我不能在那里发表评论(我可能会在表达对GeoDjango文档的不满之后被禁止),所以我将分享对解决方案的改进在下面.

django django-permissions django-migrations

14
推荐指数
2
解决办法
5726
查看次数

关于数据库类型的Django Migration RunSQL条件

我试图使用migrations.RunSQLDjango迁移来运行一些任意的SQL代码.我想仅针对某些db后端运行此迁移(例如仅针对postgres).

我想使用这样的东西,但我没有看到类中的数据库连接信息Migration.

django django-orm django-database django-migrations

14
推荐指数
4
解决办法
2869
查看次数

表被删除了,我怎样才能让Django重新创建呢?

有两个模型组和学生,只有一个表的组,学生表被删除.

如何maje Django再次创建它?如果我做了数字,它会打印"未检测到任何变化".

在管理页面上,当我单击Students表时,它会抛出异常:

relation "students_students" does not exist
Run Code Online (Sandbox Code Playgroud)

python django postgresql django-models django-migrations

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

尝试进行迁移时,获取"以下内容类型已过时且需要删除".这意味着什么,我该如何解决?

这是我的models.py:

class Notification(models.Model):
    user = models.ForeignKey(User)
    createdAt = models.DateTimeField(auto_now_add=True, blank=True)
    read = models.BooleanField(default=False, blank=True)

    class Meta:
        abstract = True

class RegularNotification(Notification):
    message = models.CharField(max_length=150)
    link = models.CharField(max_length=100)

class FNotification(Notification):
    # same as Notification
    pass
Run Code Online (Sandbox Code Playgroud)

当我这样做时python manage.py makemigrations,这就是它所说的:

Migrations for 'CApp':
  0019_auto_20151202_2228.py:
    - Create model RegularNotification
    - Create model FNotification
    - Remove field user from notification
    - Add field f_request to userextended
    - Delete model Notification
Run Code Online (Sandbox Code Playgroud)

首先,它说的很奇怪,Remove field user from notification因为user它仍然在我的Notiication模型中(因此,如果有人能够弄清楚为什么它说"从通知中删除现场用户",那就太好了!)但是,当我继续前进并尝试时做python manage.py …

django django-models django-contenttypes django-migrations

14
推荐指数
1
解决办法
7979
查看次数

尝试在Django 1.9中迁移 - 奇怪的SQL错误"django.db.utils.OperationalError:near")":语法错误"

我不知道是什么导致了这个错误.它似乎是一个没有修复的错误.任何人都可以告诉我如何解决这个问题吗?令我感到沮丧的是,我永无止境.谢谢.

Operations to perform:
  Apply all migrations: admin, contenttypes, optilab, auth, sessions
Running migrations:
  Rendering model states... DONE
  Applying optilab.0006_auto_20160621_1640...Traceback (most recent call last):
  File "manage.py", line 10, in <module>
    execute_from_command_line(sys.argv)
  File "C:\Python27\lib\site-packages\django\core\management\__init__.py", line 353, in execute_from_command_line
    utility.execute()
  File "C:\Python27\lib\site-packages\django\core\management\__init__.py", line 345, in execute
    self.fetch_command(subcommand).run_from_argv(self.argv)
  File "C:\Python27\lib\site-packages\django\core\management\base.py", line 348, in run_from_argv
    self.execute(*args, **cmd_options)
  File "C:\Python27\lib\site-packages\django\core\management\base.py", line 399, in execute
    output = self.handle(*args, **options)
  File "C:\Python27\lib\site-packages\django\core\management\commands\migrate.py", line 200, in handle
    executor.migrate(targets, plan, fake=fake, fake_initial=fake_initial)
  File "C:\Python27\lib\site-packages\django\db\migrations\executor.py", line 92, in migrate
    self._migrate_all_forwards(plan, …
Run Code Online (Sandbox Code Playgroud)

python sqlite django django-models django-migrations

14
推荐指数
1
解决办法
7804
查看次数