Saya ingin membuat objek model, seperti Person, jika id person tidak ada, atau saya akan mendapatkan objek person tersebut.
Kode untuk membuat orang baru sebagai berikut:
class Person(models.Model):
identifier = models.CharField(max_length = 10)
name = models.CharField(max_length = 20)
objects = PersonManager()
class PersonManager(models.Manager):
def create_person(self, identifier):
person = self.create(identifier = identifier)
return person
Tapi saya tidak tahu di mana harus memeriksa dan mendapatkan objek person yang ada.
python
django
django-models
pengguna1687717
sumber
sumber
QuerySet
telah dikonfirmasiupdate_or_create
Tidak jelas apakah pertanyaan Anda menanyakan metode get_or_create (tersedia setidaknya dari Django 1.3) atau metode update_or_create (baru di Django 1.7). Itu tergantung pada bagaimana Anda ingin memperbarui objek pengguna.
Contoh penggunaan adalah sebagai berikut:
sumber
update_or_create
karena untuk kasus penggunaan itu lebih baik daripadaget_or_create
hanya memanggilsave()
objek itu lagi.Person.objects.get_or_create(a=a, b=b, c=c, defaults={"name": name})
defaults
argumen untuk fungsi ini adalah tempat Anda menentukan bidang apa yang ingin Anda tambahkan ke model. Ini tidak ada hubungannya dengan default yang ditentukan pada bidang model AndaDjango memiliki dukungan untuk ini, periksa get_or_create
sumber
Untuk objek dalam jumlah kecil, update_or_create berfungsi dengan baik, tetapi jika Anda melakukan terlalu banyak koleksi, itu tidak akan diskalakan dengan baik. update_or_create selalu pertama menjalankan SELECT dan setelah itu UPDATE.
Ini paling baik hanya akan menjalankan kueri pembaruan pertama, dan hanya jika cocok dengan baris nol menjalankan kueri INSERT lain. Yang akan sangat meningkatkan kinerja Anda jika Anda mengharapkan sebagian besar baris benar-benar ada.
Itu semua tergantung pada kasus penggunaan Anda. Jika Anda mengharapkan sebagian besar sisipan maka mungkin perintah bulk_create () bisa menjadi opsi.
sumber
Saya pikir saya akan menambahkan jawaban karena judul pertanyaan Anda sepertinya menanyakan cara membuat atau memperbarui, daripada mendapatkan atau membuat seperti yang dijelaskan dalam badan pertanyaan.
Jika Anda memang ingin membuat atau memperbarui objek, metode .save () sudah memiliki perilaku ini secara default, dari dokumen :
Perlu dicatat bahwa ketika mereka mengatakan 'jika UPDATE tidak memperbarui apa pun', mereka pada dasarnya mengacu pada kasus di mana id yang Anda berikan objek tersebut belum ada dalam database.
sumber
Jika salah satu masukan saat Anda membuat adalah kunci utama, ini sudah cukup:
Ini akan diperbarui secara otomatis jika ada karena dua data dengan kunci utama yang sama tidak diperbolehkan.
sumber