django模型外键AttributeError

Posted

技术标签:

【中文标题】django模型外键AttributeError【英文标题】:django model foreign key AttributeError 【发布时间】:2019-07-19 03:27:19 【问题描述】:

在我的 Django 项目中,我有两个应用程序:"music""user"。 我正在尝试在我的应用程序 "music" 中创建一个表格作为表格 "MusicPiece" 和表格 "Member" 之间的联合表格从另一个应用程序“用户”。我按照我在其他帖子中阅读的内容进行操作,但在进行迁移时遇到了 AttributeError

AttributeError: module 'user.models' has no attribute 'Member'    

这是我的两个 models.py 文件: -在“音乐”中:

from django.db import models
from django.utils import timezone
from user import models as user_models

class MusicPiece(models.Model):
    name = models.CharField(max_length=20)

class MusicPieceAuthorship(models.Model):
    user = models.ForeignKey(user_models.Member,
                             on_delete=models.CASCADE)
    music_piece = models.ForeignKey(MusicPiece,
                                    on_delete=models.CASCADE)

-在“用户”中:

from django.db import models
from django.utils import timezone
from django.contrib.auth.models import User
from music import models as music_models


class Member(models.Model):
    user = models.OneToOneField(User)
    birth_date = models.DateField(null=True)
    avatar = models.ImageField()

最奇怪的是,当我在 user.models.py 中导入 music.models.MusiquePiece 时,它运行良好。 当我导入 user.models.xxxx 时,它在任何应用程序中都不起作用。

你知道问题出在哪里吗?

【问题讨论】:

搜索“python循环导入” 【参考方案1】:

@AlexHall 在这里是正确的。尝试将 music.py 更改为

from django.db import models
from django.utils import timezone

class MusicPiece(models.Model):
    name = models.CharField(max_length=20)

class MusicPieceAuthorship(models.Model):
    from user.models import Member # Ugly but avoids circular imports

    user = models.ForeignKey(Member,
                             on_delete=models.CASCADE)
    music_piece = models.ForeignKey(MusicPiece,
                                    on_delete=models.CASCADE)

此外,看起来您实际上并没有在成员脚本中使用您的音乐模型,因此请删除下面的行以避免循环导入的进一步问题。

from music import models as music_models

【讨论】:

非常感谢,我实际上在我的帖子中没有提到的另一个表中使用了音乐模型。我将尝试将所有连接表放在同一个模型文件中,这样我就不必导入两次了。

以上是关于django模型外键AttributeError的主要内容,如果未能解决你的问题,请参考以下文章

Django-获取外键模型

django - 模型 unicode() 显示外键对象属性

Django 中的抽象模型和外键

django 查询具有外键的模型,检查该外键的属性

Django模型基于外键自动递增主键

外键模型的django计数