如何避免圆形django模型导入?

时间:2017-12-15 15:07:08

标签: python django django-models

我在下面有这些模型

# user profile models file
from ad.models import FavoriteAd
class UserProfile(models.Model):

    def get_user_favorite_ad(self):
        return FavoriteAd.objects.filter(fav_user=self)


# ad models file
from user_profile.models import UserProfile

class FavoriteAd(models.Model):
    fav_user = models.ForeignKey(UserProfile, blank=False, on_delete=models.CASCADE)

我尝试过使用这些,但它会给我NameError UserProfile not found

# ad models files
class FavoriteAd(models.Model):
    fav_user = models.ForeignKey('user_profile.UserProfile', blank=False, on_delete=models.CASCADE)

还尝试了这些,但仍然得到模型未准备好的错误

# ad models files
from django.apps import apps
UserProfile = apps.get_model('user_profile', 'UserProfile')
class FavoriteAd(models.Model):
    fav_user = models.ForeignKey(UserProfile, blank=False, on_delete=models.CASCADE)

1 个答案:

答案 0 :(得分:3)

  

您在FavoriteAd方法中使用get_user_favorite_ad   UserProfile模型

这就是你无法在FavoriteAd中导入它的原因,这导致循环导入。

要获取该用户的收藏广告,请使用favoritead_set获取related objects

# remove that import as well
# from ad.models import FavoriteAd

class UserProfile(models.Model):

    def get_user_favorite_ad(self):
        return self.favoritead_set.all()