Kembali ke sumber data asli
Metode berikut memungkinkan Anda untuk mengeksekusi kueri, tetapi alih-alih mengembalikan model ormar, kembalikan kamus atau daftar tupel.
-
values(fields = None, exclude_through = False) -> List[Dict] -
values_list(fields = None, exclude_through = False, flatten = False) -> List -
Agen Setelan Kueri
QuerysetProxy.values(fields = None, exclude_through = False)metodeQuerysetProxy.values_list(fields = None, exclude_through= False, flatten = False)metode
Bahaya!!!Perhatikan bahwa nilai dan nilai\ _ daftar melewatkan penguraian hasil ke model ormar, dan karena itu lewati validasi hasil!
Peringatan!!!, perhatikan bahwa setiap entri dalam daftar hasil adalah cerminan satu-ke-satu dari baris hasil kueri. Karena baris tidak diurai jika Anda memiliki hubungan satu-ke-banyak atau banyak-ke-banyak, nilai kolom duplikat muncul di entri hasil jika baris induk memiliki beberapa baris terkait.
nilai
values(fields: Union[List, str, Set, Dict] = None, exclude_through: bool = False) -> List[Dict]
Mengembalikan daftar kamus nilai yang mewakili kolom dari database.
Anda dapat menggunakan parameter bidang untuk memilih subset bidang yang menerima rangkaian parameter yang sama dengan metode bidang ().
Harap dicatat bahwa melewati bidang ke nilai (bidang) sebenarnya adalah jalan pintas ke bidang panggilan (bidang).nilai ().
!!!Untuk mempelajari lebih lanjut tentang apa yang dapat Anda teruskan ke bidang dan cara memilih bidang model bersarang, baca dokumentasi Kolom Pilih
Anda dapat membatasi jumlah baris dengan menyediakan kondisi dalam filter () dan kecuali (), tetapi perlu diketahui bahwa meskipun hanya satu baris (atau tidak ada baris!) yang memenuhi kriteria Anda, Anda akan mengembalikan daftar sebagai tanggapan.
Contoh:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | |
Akses model pos:
1 2 3 4 5 6 | |
Untuk memilih model terkait secara bersamaan, gunakan pilih\ _ lated atau prefetch\ _ lated.
Perhatikan bagaimana kolom model bersarang di awali dengan jalur relasional penuh dari model otonom (model yang digunakan dalam kueri).
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | |
Pilih pengguna dengan peran
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | |
!!!Perhatikan bahwa hubungan antara peran dan pengguna banyak-ke-banyak, sehingga Anda juga bisa mendapatkan kolom model secara default.
Gabungkan bidang dan bidang yang relevan untuk memilih hanya 3 bidang.
Harap dicatat bahwa kami juga mengecualikan definisi dengan model, karena menurut definisi, setiap model yang terkandung dalam gabungan tetapi tanpa referensi di bidang diasumsikan dipilih sepenuhnya (termasuk semua bidang).
!!!Perhatikan bahwa sebagai lawan dari pendekatan queryset lain di sini, Anda dapat mengecualikan model perantara tetapi menjaga kolom trailing, yang tidak masuk akal saat mengurai sumber data asli ke dalam model.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | |
Jika ada beberapa ManyToBanyak model dalam kueri, Anda harus mengecualikan setiap model secara manual.
Untuk menghindari beban ini, ormar memberi Anda parameter kecuali\ _ through = False. Jika bendera ini disetel ke True, semua model sepenuhnya dikecualikan.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | |
daftar nilai
values_list(fields: Union[List, str, Set, Dict] = None, flatten: bool = False, exclude_through: bool = False) -> List
Mengembalikan daftar tuples yang mewakili nilai kolom dari database.
Anda dapat menggunakan parameter bidang untuk memilih subset bidang yang menerima rangkaian parameter yang sama dengan metode bidang ().
Perhatikan bahwa melewati bidang ke nilai\ _ daftar (bidang) sebenarnya adalah jalan pintas ke bidang panggilan (bidang).value\ _ list ().
!!!Untuk mempelajari lebih lanjut tentang apa yang dapat Anda teruskan ke bidang dan cara memilih bidang model bersarang, baca dokumentasi Kolom Pilih
Jika Anda hanya memilih satu kolom / bidang, Anda dapat lulus pipih = Benar, yang akan mengembalikan daftar nilai alih-alih daftar elemen tupel.
!!!memperingatkan bahwa pengaturan rata = Benar akan membuang QueryDefinitionError pengecualian jika beberapa (atau tidak ada, yang berarti semua) bidang yang dipilih.
Anda dapat membatasi jumlah baris dengan menyediakan kondisi dalam filter () dan kecuali (), tetapi perlu diketahui bahwa meskipun hanya satu baris (atau tidak ada baris!) yang memenuhi kriteria Anda, Anda akan mengembalikan daftar sebagai tanggapan.
Contoh:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | |
Akses model pos:
1 2 3 4 5 6 7 | |
Untuk memilih model terkait secara bersamaan, gunakan pilih\ _ lated atau prefetch\ _ lated.
Mari kita memperumit hubungan dan memodifikasi model kategori yang disebutkan sebelumnya untuk merujuk model pengguna.
1 2 3 4 5 6 7 8 | |
Sekarang buat data sampel dengan tautan pengguna.
1 2 3 4 5 6 | |
Gabungkan bidang dan bidang yang relevan untuk memilih hanya 3 bidang.
Harap dicatat bahwa kami juga mengecualikan definisi dengan model, karena menurut definisi, setiap model yang terkandung dalam gabungan tetapi tanpa referensi di bidang diasumsikan dipilih sepenuhnya (termasuk semua bidang).
!!!Perhatikan bahwa sebagai lawan dari pendekatan queryset lain di sini, Anda dapat mengecualikan model perantara tetapi menjaga kolom trailing, yang tidak masuk akal saat mengurai sumber data asli ke dalam model.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | |
Jika ada beberapa ManyToBanyak model dalam kueri, Anda harus mengecualikan setiap model secara manual.
Untuk menghindari beban ini, ormar memberi Anda parameter kecuali\ _ through = False. Jika bendera ini disetel ke True, semua model sepenuhnya dikecualikan.
1 2 3 4 5 6 7 8 | |
Gunakan ratakan untuk mendapatkan daftar nilai.
1 2 3 4 5 6 | |
Metode QuerysetProxy
Saat mengakses bidang ManyToMany dan ReverseForeignKey yang relevan secara langsung, daftar model terkait dikembalikan.
Tetapi juga memaparkan subset dari QuerySet API, sehingga Anda dapat memfilter, membuat, memilih model terkait, dll. langsung dari model induk.
Peringatan!!!Karena menggunakan nilai dan nilai\ _ list model skips parsing dan validasi, kedua metode ini tidak menghapus model terkait yang dimuat saat ini dan tidak menimpa model yang saat ini dimuat dengan hasil panggilan mereka sendiri dibandingkan dengan semua metode baca lainnya di querysetproxy!
nilai
Sama seperti fungsi nilai di atas, tetapi memungkinkan Anda untuk mengambil objek terkait dari ujung hubungan yang lain.
!!!Untuk mempelajari lebih lanjut tentang QuerysetProxy, kunjungi bagian QuerysetProxy
daftar nilai
Sama persis dengan fungsi nilai\ _ daftar di atas, tetapi memungkinkan Anda untuk menanyakan atau membuat objek terkait dari ujung hubungan yang lain.
!!!Untuk mempelajari lebih lanjut tentang QuerysetProxy, kunjungi bagian QuerysetProxy