Django secara otomatis membuat field id sebagai kunci utama.
Sekarang saya perlu mendapatkan objek dengan id ini.
object = Class.objects.filter()
Bagaimana cara menulis filter ini?
Django secara otomatis membuat field id sebagai kunci utama.
Sekarang saya perlu mendapatkan objek dengan id ini.
object = Class.objects.filter()
Bagaimana cara menulis filter ini?
Jawaban:
Jika Anda ingin mendapatkan sebuah objek, menggunakan get()
lebih mudah:
obj = Class.objects.get(pk=this_object_id)
id
dalam fungsi built-in yang mengembalikan identitas suatu objek. Dalam kebanyakan kasus, merujuk sesuatu dengan id
akan melakukan hal yang benar, misalnya Class.objects.get(id=this_object_id)
bekerja. Tapi kurasa itu sesuatu yang perlu dipertimbangkan.
Saya sampai di sini karena masalah yang sama, tetapi untuk alasan yang berbeda:
Class.objects.get(id=1)
Kode ini memunculkan pengecualian ImportError. Yang membingungkan saya adalah bahwa kode di bawah ini dieksekusi dengan baik dan mengembalikan hasil yang ditetapkan seperti yang diharapkan:
Class.objects.all()
Ekor pelacakan balik untuk get()
metode ini:
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
Membaca kode di dalam Django loading.py
, saya sampai pada kesimpulan bahwa saya settings.py
memiliki jalur yang buruk ke aplikasi saya yang berisi Class
definisi model saya . Yang harus saya lakukan hanyalah memperbaiki jalur ke aplikasi danget()
metode dijalankan dengan baik.
Ini saya settings.py
dengan jalur yang dikoreksi:
INSTALLED_APPS = (
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.sites',
# ...
'mywebproject.myapp',
)
Semua kebingungan disebabkan karena saya menggunakan ORM Django sebagai standalone, jadi namespace harus mencerminkan itu.
Kamu bisa memakai:
objects_all=Class.objects.filter(filter_condition="")
Ini akan mengembalikan satu set kueri meskipun mendapat satu objek. Jika Anda membutuhkan tepat satu objek, gunakan:
obj=Class.objects.get(conditon="")
Anda juga dapat menggunakan pintasan get_object_or_404 django. Ini menimbulkan kesalahan 404 jika objek tidak ditemukan.
pk
adalah cara yang disukai untuk merujuk ke kunci utama untuk model apa pun. Theid
lapangan hanya dihasilkan jika penulis Model tidak secara khusus menunjuk kunci utama. Jika penulis melakukan menentukan bidang kunci utama yang tidak bernamaid
, maka tidak akan menjadiid
lapangan.