Tôi đã có một cuộc tranh luận về điều này với một số đồng nghiệp. Có cách nào ưa thích để lấy một đối tượng ở Django khi bạn đang mong đợi một đối tượng không?Bộ lọc Django so với nhận đối tượng đơn lẻ?
Hai cách rõ ràng là:
try:
obj = MyModel.objects.get(id=1)
except MyModel.DoesNotExist:
# we have no object! do something
pass
và
objs = MyModel.objects.filter(id=1)
if len(objs) == 1:
obj = objs[0]
else:
# we have no object! do something
pass
Phương pháp đầu tiên dường như tính hành chính xác hơn, nhưng sử dụng ngoại lệ trong dòng điều khiển trong đó có thể giới thiệu một số chi phí. Thứ hai là vòng xoay nhiều hơn nhưng sẽ không bao giờ nêu ra một ngoại lệ.
Bất kỳ suy nghĩ nào trong số này là thích hợp hơn? Đó là hiệu quả hơn?
Không kinh nghiệm với Django nhưng vẫn tại chỗ trên. Rõ ràng, ngắn gọn và an toàn theo mặc định, là các nguyên tắc tốt cho dù ngôn ngữ hoặc khuôn khổ là gì. – nevelis