Nếu friend_q không phải là người dùng có trong cơ sở dữ liệu, to_friend sẽ bằng danh sách trống.
>>> from django.contrib.auth.models import User
>>> User.objects.filter(username='does-not-exist')
[]
Tuy nhiên, nó tốt hơn để sử dụng phương thức get() để tra cứu một mục cụ thể:
>>> User.objects.get(username='does-exist')
<User: does-exist>
>>> User.objects.get(username='does-not-exist')
Traceback (most recent call last):
File "<console>", line 1, in <module>
File "/usr/lib/python2.5/django/db/models/manager.py", line 120, in get
File "/usr/lib/python2.5/django/db/models/query.py", line 305, in get
DoesNotExist: User matching query does not exist.
Bây giờ bạn có thể bắt các ngoại lệ DoesNotExist và có những hành động thích hợp.
try:
to_friend = User.objects.get(username=friend_q)
except User.DoesNotExist:
# do something, raise error, ...
"to_friends [0]" sẽ sinh ra một đối tượng duy nhất, trong khi mã op '[0: 1]' cho ra một danh sách với một đối tượng duy nhất trong đó. Không hoàn toàn giống nhau! -) –
to_friends sẽ không bao giờ là Không - nó vẫn sẽ là đối tượng truy vấn không trả về kết quả nào. –
Ồ, và cũng vậy, đối tượng Không được che chắn để trở thành một singleton, vì vậy bạn nên sử dụng so sánh danh tính, ví dụ: "if to_friends is not None:" –