【问题标题】:Django django.contrib.sites where to put migration?Django django.contrib.sites 在哪里放置迁移?
【发布时间】:2016-09-04 19:52:17
【问题描述】:

django 文档说要更改 django.contrib.sites 框架中的站点名称和域,应该使用迁移 [1]。

但是他们忘记了我应该把这个迁移放在哪里。我试图创建一个名为“sites”的目录和一个名为“django.contrib.sites”的目录。但是无论我将迁移放在哪个目录中,manage.py migration 总是说没有什么要更新的。

我也尝试运行python manage.py makemigrations --empty sites,但随后在lib 目录中创建了迁移:ve/lib/python3.5/site-packages/django/contrib/sites/migrations/0003_auto_20160904_2144.py。这可能是正确的行为,但是我无法在源代码控制下设置我的更改。

如果我的迁移有问题,这里是:

from __future__ import unicode_literals

from django.db import migrations, models

def set_site_name(apps, schema_editor):
    Sites = apps.get_model('django.contrib.sites', 'site')
    site = Sites.objects.filter(id=1).first()
    if site != None:
        site.name = "name"
        site.domain = "name.com"

class Migration(migrations.Migration):
    initial = True

    operations = [
        migrations.RunPython(set_site_name),
    ]

所以我的问题是:django 期望在哪里找到这些迁移?

非常感谢您的帮助。

[1]https://docs.djangoproject.com/en/1.10/ref/contrib/sites/#enabling-the-sites-framework

【问题讨论】:

  • 仅供参考:不需要更改“example.com”条目。如果您只是插入自己的条目,则“example.com”条目永远不会出现。

标签: python django django-models


【解决方案1】:

Django 项目中的每个应用程序都必须有一个唯一的label。将您的应用命名为 sites 不是一个好主意 - 除非您更改应用配置类中的标签,否则它将与 django.contrib.sites 应用冲突。

如果您有一个特定于您的项目的现有应用,您可以使用该应用来存储数据迁移。

或者选择其他名称,例如mysites。使用./manage.py startapp mysite 创建应用程序,将应用程序添加到您的INSTALLED_APPS,然后创建一个空白迁移。

【讨论】:

  • 不要忘记在迁移中添加对 sites 应用程序的依赖项,如 here 所述。
  • 我所说的站点应用程序 django.contrib.sites。我想重命名“example.com”条目,使其适合我的实际站点名称。
  • 如你所见,你不应该将迁移添加到 ``django.contrib.sites` 目录,因为它不是你的应用程序,也不受你的源代码控制。将迁移添加到不同的应用程序(或者选择一个受源代码控制的现有应用程序,或者按照我的建议创建一个新的应用程序,如 mysites)。
  • 好的,我介绍了一个“初始*”应用程序。非常感谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-03-23
  • 2020-03-03
  • 1970-01-01
  • 1970-01-01
  • 2018-12-07
  • 2016-09-23
  • 2011-06-29
相关资源
最近更新 更多