Kueri database Django: Bagaimana mendapatkan objek dengan id?


105

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:


179

Jika Anda ingin mendapatkan sebuah objek, menggunakan get()lebih mudah:

obj = Class.objects.get(pk=this_object_id)

18
FYI, pkadalah cara yang disukai untuk merujuk ke kunci utama untuk model apa pun. The idlapangan hanya dihasilkan jika penulis Model tidak secara khusus menunjuk kunci utama. Jika penulis melakukan menentukan bidang kunci utama yang tidak bernama id, maka tidak akan menjadi idlapangan.
Craig Trader

Juga FYI, iddalam fungsi built-in yang mengembalikan identitas suatu objek. Dalam kebanyakan kasus, merujuk sesuatu dengan idakan melakukan hal yang benar, misalnya Class.objects.get(id=this_object_id)bekerja. Tapi kurasa itu sesuatu yang perlu dipertimbangkan.
Tom

15

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.pymemiliki jalur yang buruk ke aplikasi saya yang berisi Classdefinisi model saya . Yang harus saya lakukan hanyalah memperbaiki jalur ke aplikasi danget() metode dijalankan dengan baik.

Ini saya settings.pydengan 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.


2

Anda juga bisa melakukan:

obj = ClassModel.get_by_id(object_id)

Ini bekerja, tetapi mungkin saya tidak yakin apakah itu didukung di Django 2.


2

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="")

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.