导致ImportError的循环依赖:无法导入名称

时间:2014-07-15 22:46:28

标签: python django model circular-dependency

这是我第一次遇到这个。也许这是由于糟糕的设计。无论如何,我不知道如何解决它。以下是不能很好玩的模型:

通话/ models.py

from agencies.models import UserProfile
class Message(models.Model):
    text = models.TextField()
    source = models.ForeignKey(UserProfile, related_name='source')
    dest = models.ForeignKey(UserProfile, related_name='dest')

    created = models.DateTimeField(auto_now_add=True)
    seen = models.BooleanField(default=False)

    class Meta:
        ordering = ['created']

机构/ models.py

# from talk.models import Message

当我取消注释它ImportError: cannot import name UserProfile时。我真的很想要它,所以我可以将这个属性添加到我的UserProfile类......

class UserProfile(models.Model):
        # ...
        @property
        def unseen_messages_from(self):
            pass # :(

有关如何解决此问题的任何想法?

1 个答案:

答案 0 :(得分:3)

Django外键允许您将模型指定为字符串以避免导入问题。在你的情况下,你可以这样做:

class Message(models.Model):
    text = models.TextField()
    source = models.ForeignKey('<appname>.UserProfile', related_name='source')
    dest = models.ForeignKey('<appname>.UserProfile', related_name='dest')

    created = models.DateTimeField(auto_now_add=True)
    seen = models.BooleanField(default=False)

    class Meta:
        ordering = ['created']

即,您可以一起删除导入。

参考,documentation