【问题标题】:Django Query Using ORM: Delete all Users with No Posts使用 ORM 的 Django 查询:删除所有没有帖子的用户
【发布时间】:2021-03-04 06:42:35
【问题描述】:

我正在关注 Corey Django 教程。

鉴于 User 模型和此 Post 模型:

class Post(models.Model):
title       = models.CharField(max_length=100)
content     = models.TextField(max_length=10000)## was unrestircated
date_posted = models.DateTimeField(default=timezone.now)#auto_now_add=True - cant updated
author      = models.ForeignKey(User, on_delete=models.CASCADE)

我尝试使用 ORM 删除所有没有任何帖子的用户,但失败了。

试图查询所有用户和所有有帖子的用户,然后去差异获取Users_to_delete,但它引发'NotSupportedError':不支持在差异()之后调用QuerySet.delete()。

如何删除所有没有帖子的用户? (使用 Django ORM) 任何帮助将不胜感激!

【问题讨论】:

    标签: django orm


    【解决方案1】:

    您可以使用以下方式过滤:

    User.objects.filter(<b>post__isnull=True</b>).delete()

    或略短:

    User.objects.filter(<b>post=None</b>).delete()

    它将在Post 模型上创建一个LEFT OUTER JOIN,并且它只会保留PostidNULL 的行。因此,这些是没有PostUsers。

    注意管理员用户可能被包括在内。您可能想使用:

    User.objects.filter(<b>post=None, is_staff=False, is_superuser=False</b>).delete()

    这将防止删除作为超级用户或员工用户的Users。


    注意:通常使用settings.AUTH_USER_MODEL [Django-doc] 引用用户模型比直接使用User model [Django-doc] 更好。更多信息可以查看referencing the User model section of the documentation

    【讨论】:

    • 我会调查的。谢谢!!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-12
    • 2021-09-25
    • 2012-04-10
    • 1970-01-01
    • 2018-11-12
    • 2012-02-19
    相关资源
    最近更新 更多