Внешний ключ модели django AttributeError - PullRequest
0 голосов
/ 25 февраля 2019

В моем проекте Django у меня есть два приложения: "музыка" и "пользователь" .
Я пытаюсь создать таблицу в своем приложении "music " как объединенная таблица между таблицей " MusicPiece " и таблицей " Member " из другого приложения" user ".Я следовал тому, что прочитал в другом посте, но при выполнении миграции получил AttributeError :

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

Вот мои два файла models.py: -in "music":

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)

-в "user":

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()

Самое странное, что когда я импортирую music.models.MusiquePiece в user.models.py работает отлично.И когда я импортирую user.models.xxxx , он не работает ни в одном приложении.

Знаете ли вы, откуда возникает проблема?

1 Ответ

0 голосов
/ 25 февраля 2019

@ 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...