【问题标题】:Django 1.8 migration weirdnessDjango 1.8 迁移怪异
【发布时间】:2015-06-16 17:27:41
【问题描述】:

Django 1.8 似乎不喜欢我的应用名称 - “订单”。

当我使用 1.8 创建新的 Django 项目时,无论数据库类型(Postgres 或 SQLite)如何,都会同步我的初始数据库以添加所有 Django 核心表。一切正常。

我可以使用几乎任何其他名称来创建应用模块,但是当我这样做时:

$ python manage.py startapp orders

orders添加到INSTALLED_APPS,然后添加一个基本模型,例如:

from django.db import models

@python_2_unicode_compatible
class Order(models.Model):
    created_on = models.DateTimeField(auto_now_add=True)
    account = models.ForeignKey(Account)
    is_complete = models.BooleanField(default=False)

    class Meta():
        app_label = 'Orders'
        ordering = ['-created_on']

    def __str__(self):
        return 'Order #{} for {}'.format(self.pk, self.account)

然后做:

$ python manage.py makemigrations

我明白了:

No changes detected in app 'orders'

我已经尝试过 Python 2.7.8 和 Python 3.4。我尝试了不同的虚拟环境,无论我如何称呼 Django 项目,我都得到了完全相同的结果。如果我什至在应用模块名称中的任何位置都包含“_orders”,则会发生完全相同的结果。

我已经无数次清除了我的.pyc 文件。我已经删除了我的数据库并重新创建了它。我不知道发生了什么,但迁移对于我刚刚完成的一个巨大的 1.7.7 项目来说非常有用。

这是我设置的相关部分。如果您需要其他任何东西,请告诉我:

DEBUG = True

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql_psycopg2',
        'NAME': 'myapp',
        'USER': 'postgres',
        'PASSWORD': '',
        'HOST': '127.0.0.1',
        'PORT': '5432'
    }
}

INSTALLED_APPS = (
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',

    'accounts',
    'animals',
    'lib',
    'orders',
)

有人有什么想法吗?我很茫然。

【问题讨论】:

  • python -c "import orders; print(orders.__path__)" 的输出是什么?您还可以显示您的设置文件吗?一个名为 orders 的应用对我来说很好用。
  • 很抱歉延迟回复您。输出为:['orders']。我将添加我的设置的相关部分。
  • 看起来一切都很好。您可以将模型导入到 shell 中吗?它是否包含 MyModel._meta.get_fields() 中的任何内容?另外,orders/migrations/ 里面有没有文件,里面有什么?
  • 是的,我可以导入Order模型并调用.get_fields():(<django.db.models.fields.AutoField: id>, <django.db.models.fields.DateTimeField: created_on>, <django.db.models.fields.related.ForeignKey: account>)
  • orders 的迁移目录目前只包含一个__init__.py 文件

标签: django django-1.8


【解决方案1】:

您的应用标签是大写的 - 它不会被识别为小写应用 orders,因为它出现在您的 INSTALLED_APPS 中。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-09-08
    • 2015-11-24
    • 2015-11-12
    • 1970-01-01
    • 1970-01-01
    • 2018-01-14
    • 2015-12-13
    • 2015-07-11
    相关资源
    最近更新 更多