Sử dụng count()
:
sc=scorm.objects.filter(Header__id=qp.id)
if sc.count() > 0:
...
Lợi thế so với ví dụ len()
là, rằng QuerySet chưa được đánh giá:
count()
thực hiện một SELECT COUNT(*)
đằng sau hậu trường, vì vậy bạn nên luôn luôn sử dụng count()
chứ không phải tải tất cả các bản ghi vào đối tượng Python và gọi len()
vào kết quả.
Có điều này trong đầu, When QuerySets are evaluated có thể đáng đọc.
Nếu bạn sử dụng get()
, ví dụ: scorm.objects.get(pk=someid)
, và đối tượng không tồn tại, một ngoại lệ ObjectDoesNotExist
được nâng lên:
from django.core.exceptions import ObjectDoesNotExist
try:
sc = scorm.objects.get(pk=someid)
except ObjectDoesNotExist:
print ...
Cập nhật: nó cũng có thể sử dụng exists()
:
if scorm.objects.filter(Header__id=qp.id).exists():
....
Returns True
nếu QuerySet chứa bất kỳ kết quả, và False
nếu không. Điều này cố gắng thực hiện truy vấn theo cách đơn giản và nhanh nhất có thể, nhưng nó thực hiện gần như cùng một truy vấn như truy vấn QuerySet bình thường.
Nguồn
2010-04-22 12:07:16
có thể trùng lặp của [đúng cách để xác nhận nếu một đối tượng tồn tại trong một cái nhìn django mà không trả lại 404 là gì? ] (http://stackoverflow.com/questions/639836/what-is-the-right-way-to-validate-if-an-object-exists-in-a-django-view-without-r) – Wtower