如何修改计算的查询集值? 颠倒多对一关系

问题描述

class Style(Model):
    id ....
    name .... 

class Song(Model):
    ...
    style = ForgeignKey(Style,related_name="songs")

queryset = Style.objects.all()
queryset[0].songs = queryset[0].songs.filter(something=1)
#or
queryset[0].songs.set(queryset[0].songs.filter(something=1))

这是我的实际代码,但除了过滤之外它不起作用......我想分配queryset.songs新过滤的歌曲......

或者在这种情况下是否有另一种方法可以有效过滤?

解决方法

您可以使用 Prefetch object [Django-doc]

from django.db.models import Prefetch

queryset = Style.objects.prefetch_related(
    Prefetch('songs',Song.objects.filter(something=1))
)

如果您访问 queryset[0].songs,您将只能获得带有 something=1 的歌曲。这当然适用于 Style 中的所有 querset

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...