konstantine
konstantine

Reputation: 33

how to avoid circular django model import?

I have these models below

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

I have tried using these but it give me the NameError UserProfile not found

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

Also tried these as well still got error that model are not ready

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

Upvotes: 0

Views: 165

Answers (1)

Satendra
Satendra

Reputation: 6865

You are using FavoriteAd inside get_user_favorite_ad method of UserProfile model

Thats the reason you are unable to import it in FavoriteAd and this is causing circular import.

For fetching favorite ads of that user, Use favoritead_set to get 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()

Upvotes: 3

Related Questions