【问题标题】:Can't make migrations run after upgrading to Django 1.7升级到 Django 1.7 后无法运行迁移
【发布时间】:2015-12-10 16:49:15
【问题描述】:

我正在尝试将我的 Django 1.6.2 应用程序升级到 Django 1.7.10,但由于 makemigrations 命令不断引发错误而被卡住了。我从未在此应用程序中使用过迁移。当我运行命令“python ./manage.py makemigrations”时,出现以下错误:

... # stacktrace
File "/Users/myname/venv/myproject/lib/python2.7/site-packages/django/db/migrations/state.py", line 248, in __init__
  raise ValueError(msg.format(field=operations[0][1], model=lookup_model))
  ValueError: Lookup failed for model referenced by field my.admin.PhotoQueue.review_queue: my.admin.my.admin.ReviewQueue

其中 my.admin 是“admin”应用的 AppConfig 标签,其模型模块包含相关类:

# apps/admin/models.py   <- I keep all my apps in an "apps" subdirectory in my project
from django.contrib.auth.models import User
class ReviewQueue(models.Model):
    """Queue contains changes that need to be reviewed."""
    user = models.ForeignKey(User)
    ...  # more declarations

class PhotoQueue(models.Model):
    """Queue contains information about photos uploaded by a user."""
    review_queue = models.OneToOneField(ReviewQueue, primary_key=True)

如您所见,我的评论队列中的一个项目可以选择与我的照片队列中的一个项目相关联。 ReviewQueue 和 PhotoQueue 类位于同一个模块中,并且 ReviewQueue 在 PhotoQueue 之前声明。我在网上查看是否有其他人遇到过这个问题,但没有看到任何东西。我还查看了是否存在与迁移和 OneToOneFields 相关的任何问题,但同样没有运气。有谁知道是什么导致了这个问题?如果我不能解决,我的生意就死了。

这是我安装的应用和 appconfig:

# conf/settings/base.py
INSTALLED_APPS = (
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.sites',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'django.contrib.admin',
    'django.contrib.admindocs',
    # Project apps
    'apps.admin',
    'apps.members',
)

# apps/admin/models/apps.py
from django.apps import AppConfig
class AdminConfig(AppConfig):
    name = 'apps.admin'
    label = 'my.admin'

谢谢!

【问题讨论】:

  • 查看INSTALLED_APPS 设置和应用配置可能会有所帮助。
  • 我已经添加了它们。谢谢。
  • 试试不带点的标签,例如myadmin 而不是 my.admin
  • 这似乎修复了错误!你怎么知道的?我现在有另一个问题,但至少我已经解决了这个问题。非常感谢。
  • 很容易错过,但docs 说标签“应该是有效的 Python 标识符”,所以我认为问题可能出在点上。

标签: python django django-models model django-migrations


【解决方案1】:

应用配置中的label 中不应包含点。你可以这样做:

class AdminConfig(AppConfig):
    name = 'apps.admin'
    label = 'myadmin'

【讨论】:

    猜你喜欢
    • 2015-07-21
    • 2020-09-29
    • 2015-02-18
    • 2016-09-07
    • 1970-01-01
    • 2015-09-12
    • 1970-01-01
    • 2014-12-13
    • 2017-06-05
    相关资源
    最近更新 更多