Pemeriksaan Django untuk setiap ada untuk query


Jawaban:


89

Penggunaan count():

sc=scorm.objects.filter(Header__id=qp.id)

if sc.count() > 0:
   ...

Keuntungan dari contoh len()adalah, QuerySet belum dievaluasi:

count()melakukan di SELECT COUNT(*)belakang layar, jadi Anda harus selalu menggunakan count() daripada memuat semua record ke dalam objek Python dan memanggil len() hasilnya.

Dengan mengingat hal ini, When QuerySets dievaluasi dapat menjadi bacaan yang layak.


Jika Anda menggunakan get(), misalnya scorm.objects.get(pk=someid), dan objek tidak ada, ObjectDoesNotExistpengecualian akan dimunculkan:

from django.core.exceptions import ObjectDoesNotExist
try:
    sc = scorm.objects.get(pk=someid)
except ObjectDoesNotExist:
    print ...

Pembaruan: itu juga mungkin untuk menggunakan exists():

if scorm.objects.filter(Header__id=qp.id).exists():
    ....

Mengembalikan Truejika QuerySet berisi hasil apa pun, dan Falsejika tidak. Ini mencoba menjalankan kueri dengan cara yang paling sederhana dan tercepat , tetapi menjalankan kueri yang hampir sama dengan kueri QuerySet normal.


52
if scorm.objects.filter(Header__id=qp.id).exists()
Alexander Lebedev

@Alex Lebedev: Ya, metode ini akan tersedia di Django 1.2. Terima kasih.
Felix Kling


0

ini berhasil untuk saya!

jika some_queryset.objects.all (). existing (): print ("tabel ini tidak kosong")

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.