相关疑难解决方法(0)

带有OuterRef的简单子查询

我正在尝试创建一个使用OuterRef的非常简单的子查询(不是为了实际目的,只是为了让它工作),但仍然遇到同样的错误.

文章/ 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
Run Code Online (Sandbox Code Playgroud)

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()))
Run Code Online (Sandbox Code Playgroud)

最后两行应该为每个Post对象提供标签数量.在这里我一直得到同样的错误:

ValueError: This queryset contains a reference to an outer query and may only be used in …
Run Code Online (Sandbox Code Playgroud)

python mysql django django-queryset django-database

28
推荐指数
2
解决办法
1万
查看次数

标签 统计

django ×1

django-database ×1

django-queryset ×1

mysql ×1

python ×1