如何在django中存储第三方应用程序迁移

时间:2017-11-07 09:03:58

标签: django django-migrations django-scheduler

我对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命令,则会在调度程序app(位于当前虚拟环境的site-packages中)内创建新的迁移,这不允许我通过VCS跟踪迁移。

我找到了几个解决方案:

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

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

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

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

1 个答案:

答案 0 :(得分:0)

  

第二个对我来说不错,但我不知道是否考虑   是解决此问题的有效方法。还有其他方法可以   存储第三方应用程序迁移?

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

  

FeinCMS本身不附带任何迁移。推荐   您可以在自己内部为FeinCMS模型添加迁移   项目。

     

...

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

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

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

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