Django 1.7a2迁移中可能存在的错误?

Django 1.7a2迁移中可能存在的错误?,django,migration,Django,Migration,我一整天都在试图弄明白这件事,但没有任何运气 这是我在使用“makemigrations”命令尝试迁移应用程序时遇到的错误 self._related_fields = self.resolve_related_fields() File "/home/cg/webdev/rivos/local/lib/python2.7/site-packages/django-django-834d78f/django/db/models/fields/related.py", line 1386, in

我一整天都在试图弄明白这件事,但没有任何运气

这是我在使用“makemigrations”命令尝试迁移应用程序时遇到的错误

self._related_fields = self.resolve_related_fields()
File "/home/cg/webdev/rivos/local/lib/python2.7/site-packages/django-django-834d78f/django/db/models/fields/related.py", line 1386, in resolve_rel                                                                              ated_fields
raise ValueError('Related model %r cannot be resolved' % self.rel.to)
ValueError: Related model 'checkout_mgr.ReturnReceipt' cannot be resolved
这是似乎正在创建错误的迁移:

# encoding: utf8
from django.db import models, migrations
import django.core.validators


class Migration(migrations.Migration):

dependencies = [
    ('checkout_mgr', '0001_initial'),
]

operations = [
    migrations.CreateModel(
        name='ReturnLineItem',
        fields=[
            (u'id', models.AutoField(verbose_name=u'ID', serialize=False, auto_created=True, primary_key=True)),
            ('return_receipt', models.ForeignKey(to='checkout_mgr.ReturnReceipt', to_field=u'id')),
            ('purchase_line_item', models.ForeignKey(to='checkout_mgr.ReceiptLineItem', to_field=u'id')),
            ('return_reason', models.CharField(default='', max_length=2, choices=[('', '-- Please Select --'), ('PD', 'Product defective'), ('PU', 'Product unsatisfactory'), ('CU', 'Customer unsatisfied'), ('LP', 'Customer found lower price'), ('CV', 'Competitor offers more value')])),
            ('return_reason_details', models.TextField(blank=True)),
            ('quantity', models.IntegerField(default=1, validators=[django.core.validators.MinValueValidator(1), django.core.validators.MaxValueValidator(100)])),
        ],
        options={
        },
        bases=(models.Model,),
    ),
]
相关型号:

class ReturnReceipt(Receipt):
class Meta:
    proxy = True

def __init__(self, *args, **kwargs):
    """
    Overload __init__ to set the receipt type to RF: Return receipt
    """
    super(ReturnReceipt, self).__init__(*args, **kwargs)
    self.type = 'RF'
    self._subtotal = self._tax_total = self._total = 0
    self.totals_calculated = False


class ReturnLineItem(models.Model):
    return_receipt = models.ForeignKey(ReturnReceipt)
ReturnReceipt
是一种代理模型,在
ReturnLineItem
模型中用作外键

Django似乎正确地生成了上面的迁移,但我不理解错误


我想我应该先在这里发布,而不是提交一份bug报告,以防我做了一些完全愚蠢的事情

几天前我也犯了同样的错误。我有一些应用程序和一些类共享相同的名称,例如:应用程序名为person,模型名为person,当我运行makemigrations并迁移时,上面提到的错误就会发生。我找到的最简单的方法是进行一次简短的重构,重命名我的模型,删除旧的迁移并创建新的迁移。不是很聪明,但我的时间不多了。对我来说仍然像是一个bug。

对我有效的解决方案是在运行命令之后完全删除我的迁移文件夹和数据库-

python manage.py makemigrations

python manage.py migrate

因为这个错误发生在我身上,是由于外键放错了位置,甚至在撤消后,这个错误也没有发生。

是不是
returnreceive
ReturnLineItem
在同一个应用程序中?如果没有,我发现每当出现此错误时,将
“其他应用程序”、“000X\u迁移”将“依赖模型”添加到迁移文件的依赖项列表中是有用的。是的,它们都在同一个应用程序中。通过在ForeignKey语句中引用实际的非代理模型,我能够克服这个问题。我没有说models.ForeignKey(ReturnReceipt),而是写models.ForeignKey(Receipt)。Django 1.7之前并非如此。我最终不得不降级回Django 1.6,因为我需要代理模型的外键支持:(好主意。我尝试了类似的方法,但一直遇到问题。我在Django 1.7的项目进行到一半时,由于迁移功能非常不稳定,我已经放弃了Django,并使用Flask+SQLAlchemy(或Peewee ORM)重新启动了它).即使现在发布了Django1.7,如果您检查bug跟踪器,仍然存在大量与迁移相关的bug。。。