数值错误:相关模型u'mutech.branch'无法解析。

3

我试图在models.py文件中创建外键。但是当运行python manage.py migrate命令时,我收到以下错误提示。之前一切都正常。即使我撤消了所有更改,它仍然会出现相同的错误。我还尝试删除我的数据库,但没有任何作用。

          Applying mutech.0004_sub_branch...Traceback (most recent call last):
      File "manage.py", line 10, in <module>
        execute_from_command_line(sys.argv)
      File "/home/rahul/mydjangoapp/jango/local/lib/python2.7/site-packages/django/core/management/__init__.py", line 385, in execute_from_command_line
        utility.execute()
       .
       .
       .
       .
       .

      File "/home/rahul/mydjangoapp/jango/local/lib/python2.7/site-packages/django/db/models/fields/related.py", line 1414, in resolve_related_fields
        raise ValueError('Related model %r cannot be resolved' % self.rel.to)
    ValueError: Related model u'mutech.branch' cannot be resolved

models.py file-

from django.db import models

class branch(models.Model):
    branch_title = models.CharField(max_length=50)

    def __unicode__(self):              # __str__ on Python 3
            return str(self.branch_title)   

class project(models.Model):
    project_title = models.CharField(max_length=50)
    project_image = models.ImageField(upload_to="images")
    project_desc = models.CharField(max_length=200)
    project_duration = models.CharField(max_length=50)
    branch = models.ForeignKey(branch)

    def __unicode__(self):              # __unicode__ on Python 2
            return str(self.project_title)

view.py file is -

from django.shortcuts import render, get_object_or_404, render_to_response
from django.http import HttpResponse, HttpResponseRedirect
from mutech.models import *

def project_info(request):
    project_list = project.objects.all()
    branch_list = branch.objects.all()
    context = {'project_list':project_list , 'branch_list':branch_list }
    return render(request, 'mutech/project.html', context)

def project_branch_info(request):
    branch_list = branch.objects.all()
    context = {'branch_list':branch_list }
    return render(request, 'mutech/project_branch_info.html', context)

检查是否有另一个名称为“branch”的变量/模型,同时您应该使用大写字母。Branch. - levi
谢谢回答,但是model.py文件中只有一个分支类。 - Rahul Satal
请问您能否发布您的迁移文件吗? - knbk
你好 @ knbk,请告诉我什么是迁移文件,以及如何获取它。 - Rahul Satal
我已经尝试删除“branch”表以及所有依赖于它的表。也就是说,在我的项目“mutech”中没有分支,但仍然出现相同的错误 - 无法解析“mutech.branch”。 - Rahul Satal
1
你的迁移文件都在 mutech/migrations/ 文件夹中。如果没有这样的文件夹,请尝试运行 python manage.py makemigrations mutech 并重新运行 python manage.py migrate - knbk
3个回答

8
我用的解决方法是完全删除我的迁移文件和数据库,然后运行以下命令 -

python manage.py makemigrations

python manage.py migrate

因为我遇到了一些外键错误,即使撤销更改后仍然出现错误。
我们要删除应用程序中的迁移文件夹,因为实际问题就在那个文件夹中,而且迁移文件夹中没有任何特殊内容,可以通过运行命令python manage.py makemigrations使用您的model.py文件重新创建它。 解决方案就是删除迁移文件夹并使用命令重新创建它。
所以你需要做的是 -
  1. 从应用程序中删除迁移文件夹。
  2. 运行命令python manage.py makemigrationspython manage.py migrate

注意:执行此操作后,数据库中的数据将会丢失,因此请仅在数据不重要时执行此操作。


1
当我尝试这样做时,它对“python manage.py makemigrations”做出回应:“未检测到更改”。 - rossdavidh
你好 @rossdavidh!我猜你没有删除迁移文件夹,所以先删除它,然后再尝试运行 "python manage.py makemigrations" 命令。如果还是不行,也可以尝试删除迁移文件夹和数据库,然后再运行命令。 - Rahul Satal
我曾经遇到过同样的问题,但似乎尽管它显示了那个消息,迁移还是完成了。 - selmanioui

2
这个问题是由于迁移中的循环依赖引起的。在最新的迁移之前运行的其他一些迁移正在调用一个重命名模型之前恢复状态的迁移。例如,您将模型foo重命名为barxyzzy.migrations.0004_rename中,但在应用迁移时,在xyzzy.migrations.0004_rename运行后运行了bozotic.0002_bozo,该迁移依赖于xyzzy.migrations.0001_initial,因此现在必须应用的迁移无法看到由xyzzy.migrations.004_rename创建的状态。
在我的项目中,我花了一个小时来调试和修复这个错误。
检查您的迁移依赖关系,并尝试手动调整依赖关系,以便在运行迁移时模型处于所需状态。

1
这与我的问题非常相似:在一个已有12个应用程序和数百个迁移的项目中,我尝试向app_x.ModelX添加一个新模型,其中包含ForeignKey。这增加了对app_x.migrations.0043的依赖,由于“相关模型...无法解析”错误,突然阻止了测试运行。原来,在(古老的)app_x.migrations.0027中有一个对重命名模型的引用,但是重命名迁移没有列为依赖项。直到今天从未给我们带来任何麻烦...修复该依赖关系似乎可以解决问题。 - djvg

2
这是我解决这个问题的方法:
  1. 创建一个名为tmp的新ForeignKey,指向你的相关模型。运行迁移。
  2. 删除旧的ForeignKey并运行迁移。
  3. tmp重命名为旧的ForeignKey名称。运行迁移。
这样,你最终需要三个迁移文件来完成一件事情,但至少它可以做到!

迁移时会导致数据丢失吗? - texnic
@texnic 在我这里有效。你的情况可能会有所不同... ⍨ - Sardathrion - against SE abuse

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接