Django ตรวจสอบสิ่งที่มีอยู่สำหรับแบบสอบถาม


88

ใน django วิธีตรวจสอบว่ามีรายการสำหรับแบบสอบถามหรือไม่

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

นี่คือวิธีการทำใน php

if(mysql_num_rows($resultn)) {
    // True condition
    }
else {
    // False condition
    }

คำตอบ:


89

ใช้count():

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

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

ข้อดีของเช่นlen()คือ QuerySet ยังไม่ได้รับการประเมิน:

count()ดำเนินการSELECT COUNT(*)เบื้องหลังดังนั้นคุณควรใช้count() แทนที่จะโหลดบันทึกทั้งหมดลงในออบเจ็กต์ Python และเรียกlen() ใช้ผลลัพธ์

เมื่อคำนึงถึงสิ่งนี้เมื่อมีการประเมิน QuerySetsจึงควรค่าแก่การอ่าน


หากคุณใช้get()เช่นscorm.objects.get(pk=someid)และไม่มีวัตถุObjectDoesNotExistข้อยกเว้นจะเพิ่มขึ้น:

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

อัปเดต: ยังสามารถใช้exists():

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

ส่งคืนTrueหาก QuerySet มีผลลัพธ์ใด ๆ และFalseถ้าไม่มี สิ่งนี้พยายามดำเนินการสืบค้นด้วยวิธีที่ง่ายและเร็วที่สุดเท่าที่จะเป็นไปได้ แต่จะดำเนินการแบบสอบถามเกือบเหมือนกับแบบสอบถาม QuerySet ปกติ


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

@ Alex Lebedev: ใช่วิธีนี้จะใช้ได้ใน Django 1.2 ขอขอบคุณ.
Felix Kling

185

ตั้งแต่ Django 1.2 คุณสามารถใช้exists():

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

if some_queryset.filter(pk=entity_id).exists():
    print("Entry contained in queryset")

25
นี่ควรเป็นคำตอบที่ได้รับการยอมรับ มีอยู่ () โดยทั่วไปเร็วกว่า count () อย่างมีนัยสำคัญ
frmdstryr

1
ดูเหมือนว่าจะเร็วกว่า.objects.get(pk=...)เส้นทางด้วย
Brad Solomon

0

สิ่งนี้ได้ผลสำหรับฉัน!

if some_queryset.objects.all (). มีอยู่ (): พิมพ์ ("ตารางนี้ไม่ว่างเปล่า")

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.