[英]django queryset filter on whether related field is empty
这是我的模型:
class Flag(models.Model):
ban = models.ForeignKey('flags.Ban', on_delete=models.CASCADE, related_name='flags')
class Ban(models.Model):
punished = models.BooleanField(default=None)
当用户报告某些内容时触发Flag
。 汇总成一个Ban
实例,供管理员验证。 简而言之,一个禁令可以有很多标志。
有一次,作者被举报,在管理员前往那里之前手动删除他/她发送的内容。 应该取消禁令。 所以。 在禁止列表视图中,我尝试将它们过滤掉并删除。
to_deletes = []
for ban in Ban.objects.all():
if not len(ban.flags.all()):
to_deletes.append(ban)
for ban in to_deletes:
ban.delete()
我想知道是否有一种方法可以将其写入查询集中,我所需要的只是一个Ban.objects.all()
拒绝列表视图的空标志以提高性能和优雅度。
您可以计算每个 Ban 实例中的标志实例,对其进行注释,然后通过此注释进行归档,类似于:
from django.db.models import Count
bans_to_delete = Ban.objects.all().annotate(count=Count('flags')).filter(count=0)
如果您只想检查是否有标志,您可以使用过滤器
bans_to_delete = (Ban
.objects
.filter(flags__isnull=True))
无需计算您不使用的东西。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.