【问题标题】:ImportError: cannot import name 'User' from partially initialized module 'apps.accounts.models' ((most likely due to a circular import)ImportError:无法从部分初始化的模块“apps.accounts.models”导入名称“用户”((很可能是由于循环导入)
【发布时间】:2021-09-22 07:59:22
【问题描述】:

我已将用户模型从博客应用程序中的帐户应用程序和 BlogPost 模型导入用户应用程序。但我得到了这个循环的 imort 问题。这个怎么解决??

Accounts.models.py 看起来像这样:

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

我的博客 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()
    .................

我也尝试过使用

from django.contrib.auth import get_user_model

User = get_user_model()

但这又带来了另一个问题

django.core.exceptions.ImproperlyConfigured:AUTH_USER_MODEL 指的是尚未安装的模型“accounts.User”

如果我在 accounts.models.py 中导入 BlogPost 模型,没有引发异常。所以,我被卡住了。

【问题讨论】:

    标签: django api django-models django-rest-framework circular-dependency


    【解决方案1】:

    不要将User 模型导入博客models.py,而是像这样更改它。

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

    【讨论】:

    • 在更改模型中的字段后不会删除我当前的数据吗?
    • 不,此更改不会影响您的数据。但请务必保留备份。
    • 虽然我这样做了,但我必须导入博客和用户,并且错误显示在导入中
    猜你喜欢
    • 2021-02-24
    • 2022-06-22
    • 2022-01-08
    • 2020-05-20
    • 2021-11-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-02-12
    相关资源
    最近更新 更多