【发布时间】:2017-10-01 21:06:50
【问题描述】:
我正在尝试制作一个使用OuterRef 的非常简单的Subquery(不是出于实际目的,只是为了让它工作),但我一直遇到同样的错误。
posts/models.py代码
from django.db import models
class Tag(models.Model):
name = models.CharField(max_length=120)
def __str__(self):
return self.name
class Post(models.Model):
title = models.CharField(max_length=120)
tags = models.ManyToManyField(Tag)
def __str__(self):
return self.title
manage.py shell代码
>>> from django.db.models import OuterRef, Subquery
>>> from posts.models import Tag, Post
>>> tag1 = Tag.objects.create(name='tag1')
>>> post1 = Post.objects.create(title='post1')
>>> post1.tags.add(tag1)
>>> Tag.objects.filter(post=post1.pk)
<QuerySet [<Tag: tag1>]>
>>> tags_list = Tag.objects.filter(post=OuterRef('pk'))
>>> Post.objects.annotate(count=Subquery(tags_list.count()))
最后两行应该给我每个 Post 对象的标签数量。在这里我不断收到同样的错误:
ValueError: This queryset contains a reference to an outer query and may only be used in a subquery.
【问题讨论】:
标签: python mysql django django-queryset django-database