Bagaimana cara menjalankan update
dan select
pernyataan yang sama queryset
daripada harus melakukan dua pertanyaan: - satu untuk memilih objek - dan satu untuk memperbarui objek
Setara dengan SQL akan menjadi seperti:
update my_table set field_1 = 'some value' where pk_field = some_value
update
metode seperti ini maka sinyal apa pun yang melekat pada model itu atau "hal kode" lainnya tidak akan berjalan melawan objek. Hanya sebuah petunjuk dari seseorang yang terbakar :)update
Metode sangat bagus untuk update massa, tetapi harus berangkat peringatan di kepala Anda ketika Anda menggunakannya bahwa Anda perlu untuk meninjau sinyal yang melekat bahwa objek yang juga mungkin perlu secara manual dipecatMyModel.objects.filter(pk=some_value).update(field1=self.data)
Objek basis data Django menggunakan metode save () yang sama untuk membuat dan mengubah objek.
Ref .: https://docs.djangoproject.com/en/1.9/ref/models/inances/
sumber
Jawaban ini membandingkan dua pendekatan di atas. Jika Anda ingin memperbarui banyak objek dalam satu baris, pilih:
Jika tidak, Anda harus mengulangi set kueri dan memperbarui objek individual:
Pendekatan 1 lebih cepat karena, ia hanya membuat satu permintaan basis data, dibandingkan dengan pendekatan 2 yang membuat permintaan basis data 'n +1'. (Untuk n item dalam set kueri)
Pendekatan fist membuat satu permintaan db yaitu UPDATE, yang kedua membuat dua: SELECT dan kemudian UPDATE.
Imbalannya adalah, misalkan Anda memiliki pemicu, seperti memperbarui
updated_on
atau bidang terkait seperti itu, itu tidak akan dipicu pada pembaruan langsung yaitu pendekatan 1.Pendekatan 1 digunakan pada queryset, sehingga dimungkinkan untuk memperbarui beberapa objek sekaligus, tidak dalam hal pendekatan 2.
sumber
hanya dalam
serializer
hal ini, Anda dapat memperbarui dengan cara yang sangat sederhana!hanya dalam hal dalam
form
hal!sumber
Django form
dari Django Proper.