2010-04-22 30 views
55

Trong django làm thế nào để kiểm tra xem bất kỳ mục tồn tại cho một truy vấnDjango kiểm tra đối với bất kỳ tồn tại cho một truy vấn

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

Đây là cách nó đã được thực hiện trong php

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

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

Trả lời

48

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.

+0

Cảm ơn nhiều ..................... – Hulk

+42

'nếu scorm.objects.filter (Header__id = qp.id) .exists()' –

+0

@Alex Lebedev: Vâng, phương pháp này sẽ có sẵn ở Django 1.2. Cảm ơn bạn. –

Các vấn đề liên quan