Bir Django sorgusunu bir değerler listesiyle nasıl filtreleyebilirim?


291

Eminim bu önemsiz bir işlem, ama nasıl yapıldığını anlayamıyorum.

Bundan daha akıllı bir şey olmalı:

ids = [1, 3, 6, 7, 9]

for id in ids:
    MyModel.objects.filter(pk=id)

Hepsini bir sorguda gibi bir şey ile almak için arıyorum:

MyModel.objects.filter(pk=[1, 3, 6, 7, 9])

Bir Django sorgusunu bir değerler listesiyle nasıl filtreleyebilirim?



Yanıtlar:



48

Öğe listeniz olduğunda ve listeden olası değerleri kontrol etmek istediğinizde kullanamazsınız =.

Sql sorgusu SELECT * FROM mytable WHERE ids=[1, 3, 6, 7, 9]doğru olmayan gibi olacaktır . Bunun için inoperatör kullanmak zorundasınız, böylece sorgu SELECT * FROM mytable WHERE ids in (1, 3, 6, 7, 9)Django'nun sağladığı __inoperatör için olduğu gibi olacaktır .


20
Küçük bir açıklama için +1. Belgeleri okuyabildiğimi bilsem de, bu belgeleri anladığım anlamına gelmez.
Austin A

6

Gönderen Django belgeleri :

Blog.objects.in_bulk([1])
{1: <Blog: Beatles Blog>}

Blog.objects.in_bulk([1, 2])
{1: <Blog: Beatles Blog>, 2: <Blog: Cheddar Talk>}

Blog.objects.in_bulk([])
{}

Blog.objects.in_bulk()
{1: <Blog: Beatles Blog>, 2: <Blog: Cheddar Talk>, 3: <Blog: Django Weblog>}

Blog.objects.in_bulk(['beatles_blog'], field_name='slug')
{'beatles_blog': <Blog: Beatles Blog>}
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.