ImportError:无法从“hymnbook.models.Author”(C:\..\hymnbook\models\Author.py)导入名称“Author”

2024-09-29 20:21:06 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试迁移我们一直在开发的这个应用程序,但是当我运行python manage.py migrate时,我遇到了以下错误:

from .author import Author ImportError: cannot import name 'Author' from 'hymnbook.models.author' (C:\Users\Asus-PC\Py charmProjects\hinario\ourhymnbook-py\novo\hymnbook\hymnbook\models\author.py)

我正在使用这个版本 python和django 3.0.6的3.7版本

ATT:所有型号都在同一目录中,但在单独的文件中

这是作者模型

from django.db import models
from .hymn import Hymn


class Author(models.Model):
    first_name = models.CharField(max_length=20, null=False, blank=False, default='')
    last_name = models.CharField(max_length=20, null=False, blank=False, default='')
    country = models.CharField(max_length=50, blank=True, null=False)
    birth = models.DateTimeField()
    death = models.DateTimeField()
    hymn = models.ManyToManyField(Hymn, on_delete=models.CASCADE())

    def __str__(self):
        return self.first_name, self.hymn

这是赞美诗模型


from django.db import models
import uuid
from .verse import Verse
from .language import Language
from .hymnbook import HymnBook
from .author import Author
from .genre import Genre


class Hymn(models.Model):
    number = models.IntegerField()
    title = models.CharField(max_length=100, blank=False, null=False)
    genre = models.ForeignKey(Genre, on_delete=models.CASCADE)
    language = models.ForeignKey(Language, on_delete=models.CASCADE)
    hymnBook = models.ForeignKey(HymnBook, on_delete=models.CASCADE)
    author = models.ManyToManyField(Author)
    date = models.DateTimeField(blank=True, null=True)

    def __str__(self):
        return self.title


如果有人能帮我,我会非常感激的

从现在起,我感谢你


Tags: namefromimportselffalseonmodelsnull
2条回答

正如@Sthino_IV在评论中提到的,你有一个circular import

  • author.py正在尝试从.hymm导入
  • hymn.py正在尝试从.author导入

您还向另一个模型声明了每个模型上的ManyToManyField。这不是典型的多对多关系的定义。阅读文档中关于pizza and toppings的示例

要解决此问题,您需要编辑authors.py:

  • 删除from .hymn import Hymn
  • 删除hymn = models.ManyToManyField(Hymn, on_delete=models.CASCADE())

我还建议您更新Hymn模型,将author属性重命名为authors,并添加related_name

class Hymn(models.Model):
    # other fields go here
    authors = models.ManyToManyField(Author, related_name='hymns')

这将允许您访问Hymn实例上的所有作者,以及Author实例上的所有赞美诗

您可能需要删除/migrations中的迁移文件,然后重新创建它

你为什么把所有的模型都分开归档?。这不是django标准 您可以直接在models.py文件中定义模型,并可以在任何需要的地方导入

from .models import Author
#if model resides in same directory
from module.models import Author
#if model resides in another directory named "module"

相关问题 更多 >

    热门问题