Saya mencoba menggunakan get_or_create untuk beberapa bidang dalam formulir saya, tetapi saya mendapatkan 500 kesalahan ketika saya mencoba melakukannya.
Salah satu garis terlihat seperti ini:
customer.source = Source.objects.get_or_create(name="Website")
Kesalahan yang saya dapatkan untuk kode di atas adalah:
Cannot assign "(<Source: Website>, False)": "Customer.source"
must be a "Source" instance.
save()
?create()
, buat objek dan simpan semuanya dalam satu langkah dan tidak perlusave()
get_or_create
mengembalikan tuple.sumber
customer.source = Source.objects.get_or_create(name="Website")[0]
customer.source, _ = Source.objects.get_or_create(name="Website")
, karena membuat fakta bahwa tuple dikembalikan lebih jelas, membantu menghindari bug di masa depan.get_or_create()
mengembalikan tuple:created
→ memiliki nilai boolean, dibuat atau tidak.customer.source
→ memiliki objekget_or_create()
metode.sumber
Mengikuti jawaban @Tobu dan komentar @mipadi, dengan cara yang lebih pythonic, jika tidak tertarik pada flag yang dibuat, saya akan menggunakan:
sumber
Masalah yang Anda temui adalah fitur terdokumentasi dari
get_or_create
.Saat menggunakan argumen kata kunci selain "default", nilai balik dari
get_or_create
adalah contoh. Itu sebabnya ini menunjukkan kepada Anda parens dalam nilai pengembalian.Anda bisa menggunakan
customer.source = Source.objects.get_or_create(name="Website")[0]
untuk mendapatkan nilai yang benar.Berikut ini tautan untuk dokumentasi: http://docs.djangoproject.com/en/dev/ref/models/querysets/#get-or-create-kwargs
sumber