django ManyToManyFieldでのデータベースクエリ
-
10-07-2019 - |
質問
ManyToManyフィールドに別のオブジェクトが含まれるすべてのオブジェクトを選択する方法を見つけたいです。次のモデルがあります(削除済み)
class Category(models.Model):
pass
class Picture(models.Model):
categories = models.ManyToManyField(Category)
visible = models.BooleanField()
1つ以上のカテゴリのすべての画像を選択する機能が必要です:
def pics_in_cats(cat_ids=()):
pass
ただし、可能な場合はQuerySetを返す必要があるため、次のようなことができます。
pics_in_cats((1,2,3)).filter(visible=True)
関連するすべてのCategoryオブジェクトをロードし、それらのpicture_set属性をマージすることで実行できますが、それは非効率的なようです。また、可能であれば生のSQLにフォールバックしないようにします。
事前に感謝
解決
カスタム関数を作成し、このようなものを使用しないのはなぜですか? (未テスト)
pics = Picture.objects.filter(categories__in = [1,2,3]).filter(visible=True)
所属していません StackOverflow