2010-05-18 22 views
29

Giả sử tôi có một bảng People, có cách nào để nhanh chóng kiểm tra xem đối tượng People có tồn tại với tên là 'Fred' không? Tôi biết tôi có thể truy vấnĐối với các mô hình Django, có lối tắt nào để xem liệu bản ghi có tồn tại không?

People.objects.filter(Name='Fred') 

và sau đó kiểm tra độ dài của kết quả trả về, nhưng có cách nào để làm điều đó một cách thanh lịch hơn không?

+0

Bản sao có thể có của [cách đúng để xác thực xem đối tượng tồn tại trong chế độ xem django mà không trả về 404 là gì?] (Http://stackoverflow.com/questions/639836/what-is-the-right-way- để xác thực-nếu-một-đối tượng-tồn tại-trong-một-django-view-without-r) – Wtower

Trả lời

33

Cập nhật:

Như đã đề cập trong câu trả lời gần đây hơn, vì Django 1.2 bạn có thể sử dụng phương pháp exists() thay vì (link).


gốc trả lời:

Dont' len sử dụng() trên kết quả, bạn nên sử dụng People.objects.filter(Name='Fred').count(). Theo tài liệu django,

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() hơn là tải tất cả các kỷ lục vào Python đối tượng và gọi len() trên kết quả (trừ khi bạn cần phải tải các đối tượng vào bộ nhớ anyway, trong trường hợp này len() sẽ nhanh hơn).

nguồn: Django docs

5

Bạn có thể sử dụng count() Ví dụ:

People.objects.filter(Name='Fred').count() 

Nếu tên cột là duy nhất sau đó bạn có thể làm:

try: 
    person = People.objects.get(Name='Fred') 
except (People.DoesNotExist): 
    # Do something else... 

Bạn cũng có thể sử dụng get_object_or_404() Ví dụ:

from django.shortcuts import get_object_or_404 
get_object_or_404(People, Name='Fred') 
6

Tính đến Django 1.2 bạn có thể sử dụng .exists() trên QuerySet, nhưng trong các phiên bản trước, bạn có thể thưởng thức rất hiệu quả lừa được mô tả trong this ticket.

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