私の醜い英語のために私を失礼です!Django:1つの公開写真を含むすべてのギャラリーを取得少なくとも
は、これらの非常に単純なモデルを想像してみて:
class Photo(models.Model):
is_public = models.BooleanField('Public', default=False)
class Gallery(models.Model):
photos = models.ManyToManyField('Photos', related_name='galleries', null=True, blank=True)
私は少なくともつのパブリック写真(および可能な場合は公開写真が多数含まれていphotos__count
属性を追加すること)を含むすべてのGallery
のインスタンスを選択する必要があります。
が、私はこのクエリを試してみました:
Gallery.objects.all()\
.annotate(Count('photos'))\
.filter(photos__is_public=True)
大丈夫のようですが、: - クエリは奇妙 ある - 各ギャラリーに追加属性photos__count
は、このギャラリーの写真の総数が含まれています、このギャラリーの公開写真の数ではなく、
私は私が必要とするハードコーディングされたSQLクエリがあることであることを薄い:
SELECT `gallery`.* , COUNT(`gallery_photos`.`photo_id`)
FROM `gallery`
INNER JOIN `gallery_photos` ON (`gallery`.`id` = `gallery_photos`.`gallery_id`)
INNER JOIN `photo` ON (`gallery_photos`.`photo_id` = `photo`.`id`)
WHERE `photo`.`is_public` = True
GROUP BY gallery.id ;
それを修正するために、任意のアイデア?
ありがとうございました! ;-)
これはうまくいきます: '' Gallery.objects.filter(photos__is_public = True).annotate(Count( 'photos')) '' ありがとうございました。 –