【问题标题】:How to store third party apps migrations in django如何在 django 中存储第三方应用程序迁移
【发布时间】:2018-04-19 14:37:45
【问题描述】:

我对 python 和 django 还很陌生,并试图基于 django-scheduler 包构建一个简单的日历。 根据 django-scheduler 文档,自定义基类可用于添加其他字段、管理器等。

所以,我使用了一个抽象模型来添加一个新字段:

#myproject/customer_calendar/models.py
from django.db import models
from main.models import Customer

class CalendarAbstract(models.Model):
    customer = models.OneToOneField(to=Customer, null=True, blank=True, related_name='calendar')

    class Meta:
        abstract = True

并将其添加到 settings.py

SCHEDULER_BASE_CLASSES = {
    'Calendar': ['customer_calendar.models.CalendarAbstract'],
}

现在,如果我使用 makemigrations 命令,则会在调度程序应用程序(位于当前虚拟环境的站点包中)中创建一个新的迁移,这不允许我通过 VCS 跟踪迁移。

我找到了几个解决方案:

1) 将整个调度程序应用程序保留在我的项目中。根据 SO,这被认为是一种不好的做法,并且应该始终通过 pip 检索第三方应用程序。

2) 使用 django 设置将所有 django-scheduler 迁移存储在我的日历应用程序中

MIGRATION_MODULES = {
    'schedule': 'customer_calendar.migrations',
}

第二个对我来说看起来不错,但我不知道它是否被认为是解决这个问题的有效方法。 是否有其他方式来存储第三方应用迁移?

【问题讨论】:

    标签: django django-migrations django-scheduler


    【解决方案1】:

    第二个我觉得不错,但不知道有没有考虑 成为这个问题的有效解决方案。有没有其他方法可以 存储第三方应用迁移?

    正如this answer 中所述,FeinCMS docs 建议使用MIGRATION_MODULES 来监控 FeinCMS 作为第三方应用程序的迁移。

    FeinCMS 本身没有任何迁移。推荐 您在自己的内部为 FeinCMS 模型添加迁移 项目。

    ...

    • 在您的应用中创建一个名为 migrate 的新文件夹,其中包含一个空的 init.py。

    • 将以下配置添加到您的 settings.py:

        MIGRATION_MODULES = {
             'page': 'yourapp.migrate.page',
             'medialibrary': 'yourapp.migrate.medialibrary', }
    

    您不得使用 migrations 作为 FeinCMS 迁移的文件夹名称, 否则 Django 会感到困惑。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-12
      • 2016-03-14
      • 2016-05-11
      • 2011-03-19
      相关资源
      最近更新 更多