问题描述
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
。