Django tự động tạo một trường id làm khóa chính.
Bây giờ tôi cần lấy đối tượng bằng id này.
object = Class.objects.filter()
Làm thế nào để viết bộ lọc này?
Django tự động tạo một trường id làm khóa chính.
Bây giờ tôi cần lấy đối tượng bằng id này.
object = Class.objects.filter()
Làm thế nào để viết bộ lọc này?
Câu trả lời:
Nếu bạn muốn lấy một đối tượng, cách sử dụng get()
đơn giản hơn:
obj = Class.objects.get(pk=this_object_id)
id
trong một hàm tích hợp trả về danh tính của một đối tượng. Trong đa số các trường hợp, việc tham khảo mọi thứ id
sẽ làm đúng như Class.objects.get(id=this_object_id)
công việc. Nhưng đó là một cái gì đó để xem xét tôi đoán.
Tôi đến đây vì cùng một vấn đề, nhưng vì một lý do khác:
Class.objects.get(id=1)
Mã này đã tăng một ngoại lệ ImportError. Điều khiến tôi bối rối là đoạn mã dưới đây thực thi tốt và trả về kết quả được đặt như mong đợi:
Class.objects.all()
Phần đuôi của get()
phương pháp truy vết :
File "django/db/models/loading.py", line 197, in get_models
self._populate()
File "django/db/models/loading.py", line 72, in _populate
self.load_app(app_name, True)
File "django/db/models/loading.py", line 94, in load_app
app_module = import_module(app_name)
File "django/utils/importlib.py", line 35, in import_module
__import__(name)
ImportError: No module named myapp
Đọc mã bên trong Django's loading.py
, tôi đi đến kết luận rằng của tôi settings.py
có một đường dẫn xấu đến ứng dụng của tôi chứa Class
định nghĩa mô hình của tôi . Tất cả những gì tôi phải làm là sửa lại đường dẫn đến ứng dụng và get()
phương thức được thực thi tốt.
Đây là của tôi settings.py
với đường dẫn đã sửa:
INSTALLED_APPS = (
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.sites',
# ...
'mywebproject.myapp',
)
Tất cả sự nhầm lẫn được gây ra bởi vì tôi đang sử dụng ORM của Django như một độc lập, vì vậy không gian tên phải phản ánh điều đó.
Bạn có thể dùng:
objects_all=Class.objects.filter(filter_condition="")
Điều này sẽ trả về một tập hợp truy vấn ngay cả khi nó nhận được một đối tượng. Nếu bạn cần sử dụng chính xác một đối tượng:
obj=Class.objects.get(conditon="")
Bạn cũng có thể sử dụng phím tắt get_object_or_404 django. Nó gây ra lỗi 404 nếu đối tượng không được tìm thấy.
pk
là cách ưa thích để tham chiếu đến khóa chính cho bất kỳ mô hình nào. Trườngid
chỉ được tạo nếu tác giả mô hình không chỉ định cụ thể khóa chính. Nếu tác giả đã chỉ định một trường khóa chính không được đặt tênid
, thì sẽ không cóid
trường này.