Django模型外键AttributeError

时间:2019-02-25 16:53:17

标签: python django django-models foreign-keys django-orm

在我的Django项目中,我有两个应用程序:“音乐” “用户”
我试图在应用程序“音乐” 中创建一个表,作为表“ MusicPiece” 和表“ Member” 之间的联合表从另一个应用程序“用户”。我遵循了我在其他文章中阅读的内容,但是在进行迁移时遇到了 AttributeError

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

这是我的两个model.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 时,它不能在任何应用程序中使用。

您知道问题出在哪里吗?

1 个答案:

答案 0 :(得分:0)

@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