【问题标题】:Django 1.7 migration errorDjango 1.7 迁移错误
【发布时间】:2015-02-09 01:15:55
【问题描述】:

我在一个名为 Availability 的模型上将一个字段从 CharField 更改为 ForeignKey,当我尝试迁移时,我不断收到以下错误:

ValueError: Lookup failed for model referenced by field reservation.Availability.location: useraccount.Location

知道为什么会发生这种情况吗?

谢谢

-------------更新的代码--------------

应用:预订

from useraccount.models import Location

class Availability(models.Model):
    location = models.ForeignKey(Location)

应用程序:用户帐户

class Location(models.Model):
    town = models.CharField(max_length=100)
    county = models.CharField(max_length=100)

    def __str__(self):
        return self.town + ', ' + self.county

堆栈跟踪

系统检查发现了一些问题:

警告: notification.NoticeSetting.send: (1_6.W002) BooleanField 没有默认值。 提示:Django 1.6 将 BooleanField 的默认值从 False 更改为 None。请参阅https://docs.djangoproject.com/en/1.6/ref/models/fields/#booleanfield 了解更多信息。 要执行的操作: 应用所有迁移:预订 运行迁移: 应用 reservation.0010_auto_20141210_0357...Traceback(最近一次通话最后): 文件“/Users/chirdeeptomar/envs/mydocbook/lib/python3.4/site-packages/django/apps/registry.py”,第 148 行,在 get_app_config 返回 self.app_configs[app_label] KeyError:'用户帐户'

在处理上述异常的过程中,又发生了一个异常:

【问题讨论】:

  • 你已经运行 makemigrations 了吗?
  • 是的,当我将 Location 添加到 useraccount App 时,应用了迁移。我还有一个用户帐户应用程序中模型的 Location 外键,并且已成功迁移。应用迁移的顺序似乎是正确的。
  • 请完整回溯
  • 您是否同时进行了 makemigrations 和 migrate?
  • 是的,除了最后一个之外,useraccount 应用已迁移。

标签: django django-1.7 django-migrations


【解决方案1】:

接下来是一个 hack,它在 在开发时 甚至在 学习 django 的其他部分时应用起来非常容易和讨厌,您只需要一个快速的解决方案完成工作……换句话说,是一种罪过……就像苦巧克力一样。

首先,我将我的数据库数据保存在一个 json 文件中,以备不时之需:

./manage.py dumpdata --exclude auth.permission --exclude contenttypes  --exclude reversion --exclude admin.LogEntry --indent 2 > db.json

当我更改模型中的某些内容并看到迁移开始引发错误时,我会尝试从数据库(或者甚至更好的是整个数据库)中删除与正在考虑的应用程序有关的所有内容,然后重新构建它:

$./manage.py migrate <myapp1> zero #No need for this if the whole database is destroyed
$rm -Rf <myapp(s/1)>/migrations/*
$./manage.py makemigrations <myapp1>( <myapp2> ... <myappN>)
$./manage.py migrate <myapp(s/1)>
$./manage.py loaddata ...

这通常比调试错误快。然而,有时会导致比它应该解决的问题更多的问题。这是数据库 json 文件派上用场的时候。

一个可怜的解决方案,但当所有这些细节让我非常生气并且我很享受它时,这是我的报复。

【讨论】:

  • 非常糟糕和丑陋的方式顺便说一句,我不推荐这种方式只是因为一列迁移
  • 是的,这是一个 hack。丑陋而有罪,但大多数时候我做出改变我已经很沮丧,我不能忍受更多的问题。我只是希望改变发生。我再次道歉,因为它是一种类似食人的解决方案,但它有两种方式:django 方式和我个人的“问题”方式。
  • 如果你有一个大数据库,每秒有数百万用户使用实时数据,那么你的黑客不应该被使用
  • 确实,只在开发时应用。这很清楚。
  • 我们在这里有效地做了类似的事情,我仍然想要一种更好的方法来处理重新进行迁移。 :-/
猜你喜欢
  • 2014-12-13
  • 2014-11-13
  • 1970-01-01
  • 2015-10-31
  • 2014-05-28
  • 2014-12-21
  • 2015-05-06
  • 2014-10-28
  • 2015-03-31
相关资源
最近更新 更多