ImportError: cannot import name 'User' from partially initialized module 'apps.accounts.models' ((most likely due to a circular import)

Viewed 3367

I have imported User model from accounts app in Blogs app and BlogPost model to User app. But I got this circular imort issue. How to solve this??

Accounts.models.py looks like this:

from apps.blogs.models import BlogPost

class Subscribers(models.Model):
    email = models.EmailField(unique=True)
    date_subscribed = models.DateField(auto_now_add=True)

    def __str__(self):
        return self.email

    class Meta:
        verbose_name_plural = "Newsletter Subscribers"

    # binding signal:
    @receiver(post_save,sender=BlogPost)
    def send_mails(sender,instance,created,**kwargs):
        subscribers = Subscribers.objects.all()
        if created:
            for abc in subscribers:
                emailad = abc.email
                send_mail('New Blog Post ', f" Checkout our new blog with title {instance.title} ",
                          emailad, [emailad],
                          fail_silently=False)
        else:
            return

My blogs models.py

from apps.accounts.models import User

class BlogPost(models.Model):

    author = models.CharField(max_length=64, default='Admin')   
    image = models.ImageField(blank=True, null=True)
    title = models.CharField(max_length=255)
    .............

class Comment(models.Model):
    # blog = models.ForeignKey(BlogPost, on_delete=models.CASCADE, default=1)
    user = models.ForeignKey(User, on_delete=models.CASCADE)
    blog = models.ForeignKey(BlogPost, on_delete=models.CASCADE, related_name='comments')
    name = models.CharField(max_length=255)
    email = models.EmailField()
    .................

I also tried using

from django.contrib.auth import get_user_model

User = get_user_model()

But this gives another issue of

django.core.exceptions.ImproperlyConfigured: AUTH_USER_MODEL refers to model 'accounts.User' that has not been installed

No exceptions were raised hadnt I imported BlogPost model in accounts.models.py. So, Iam stuck.

1 Answers

Instead of importing the User model into blogs models.py change it like this.

user = models.ForeignKey("accounts.User", on_delete=models.CASCADE)
blog = models.ForeignKey("blogs.BlogPost", on_delete=models.CASCADE, related_name='comments')
Related