Apa perbedaan antara menjalankan dua perintah:
foo = FooModel()
dan
bar = BarModel.objects.create()
Apakah yang kedua segera membuat BarModel
dalam database, sedangkan untuk FooModel
, save()
metode harus dipanggil secara eksplisit untuk menambahkannya ke database?
Jawaban:
https://docs.djangoproject.com/en/stable/topics/db/queries/#creating-objects
sumber
Kedua sintaks tidak sama dan dapat menyebabkan kesalahan yang tidak terduga. Berikut adalah contoh sederhana yang menunjukkan perbedaan. Jika Anda memiliki model:
Dan Anda membuat objek pertama:
Kemudian Anda mencoba membuat objek dengan kunci utama yang sama:
sumber
.create()
membuat objek bahkan jika bidang yang diperlukan (null=False
) hilang? Saya menambahkan tes pada proyek saya dancreate
mendapatkan hasil yang tidak terdugaCharField
bahkan jika disetel kenull=False
tidak akan menimbulkan kesalahan jika tidak disediakan: ini karena Django menetapkan string secara default ke string kosong""
sehingga tidak secara teknisnull
obj = MyModel()
, laluobj.full_clean()
untuk sekarang.PEMBARUAN 15.3.2017:
Saya telah membuka masalah Django tentang hal ini dan tampaknya akan diterima di sini: https://code.djangoproject.com/ticket/27825
Pengalaman saya adalah bahwa ketika menggunakan kelas
Constructor
(ORM
) dengan referensi dengan Django1.10.5
mungkin ada beberapa ketidakkonsistenan dalam data (yaitu atribut dari objek yang dibuat mungkin mendapatkan tipe data input daripada tipe cast dari properti objek ORM) contoh :models
some_test.py
-object.create
some_test.py
-Constructor()
sumber