繁体   English   中英

Django:您如何将 QuerySet 与 ForeignKey 对象属性上的字段进行比较?

[英]Django: How do you compare a QuerySet with fields on a ForeignKey object's property?

我正在尝试针对 ForeignKey 对象属性上的字段查询 model。 我有以下型号:

class Song(models.Model):
  name = models.CharField(max_length=20)
  limit = models.IntegerField()


class Recording(models.Model):
  song = models.ForeignKey(Song, on_delete=models.CASCADE)
  status = models.CharField(
    max_length=1,
    choices=STATUS_CHOICES,
    default=OPEN
  )

我想查询状态为 OPEN 且计数超过“限制”(歌曲上的字段)的录音的歌曲。 查看django 聚合文档,我尝试了以下内容:

# View

get(self):
  songs_count = Count('recording', filter=Q(recording__status='O'))
        songs = Song.objects.annotate(songs_count=songs_count)
        results = songs.filter(songs_count__gt=< each song.limit... >)

有人可以指出如何构建此查询的方式吗? 我非常感谢任何和所有的反馈。

您可以使用F object [Django-doc]来引用字段,因此:

from django.db.models import F, Q

Songs.objects.annotate(
    songs_count=Count('recording', filter=Q(recording__status='O'))
).filter(songs_count__gt=F('limit'))

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM