循环依赖导致导入错误:无法导入名称

1 投票
1 回答
503 浏览
提问于 2025-04-18 13:28

这是我第一次遇到这种情况。可能是设计得不好。总之,我不知道该怎么解决。这里有一些模型,它们之间的配合不太顺畅:

talk/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']

agencies/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 个回答

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']

也就是说,你可以完全不需要导入。

参考,文档

撰写回答