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.

Felix Kling
sumber
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
185

Pada Django 1.2, Anda dapat menggunakan exists():

https://docs.djangoproject.com/en/dev/ref/models/querysets/#exists

if some_queryset.filter(pk=entity_id).exists():
    print("Entry contained in queryset")
sdornan
sumber
25
Ini harus menjadi jawaban yang diterima. existing () umumnya jauh lebih cepat daripada count ().
frmdstryr
1
Ini juga tampaknya lebih cepat daripada .objects.get(pk=...)rute
Brad Solomon
0

ini berhasil untuk saya!

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

i_m_brunda
sumber