Saya memiliki model yang saya ingin berisi nama subjek dan inisialnya (datanya agak dianonimkan dan dilacak dengan inisial).
Sekarang, saya menulis
class Subject(models.Model):
name = models.CharField("Name", max_length=30)
def subject_initials(self):
return ''.join(map(lambda x: '' if len(x)==0 else x[0],
self.name.split(' ')))
# Next line is what I want to do (or something equivalent), but doesn't work with
# NameError: name 'self' is not defined
subject_init = models.CharField("Subject Initials", max_length=5, default=self.subject_initials)
Seperti yang ditunjukkan oleh baris terakhir, saya lebih suka agar inisial benar-benar disimpan dalam database sebagai bidang (terlepas dari nama), tetapi itu diinisialisasi dengan nilai default berdasarkan bidang nama. Namun, saya mengalami masalah karena model django sepertinya tidak memiliki 'diri'.
Jika saya mengubah baris menjadi subject_init = models.CharField("Subject initials", max_length=2, default=subject_initials)
, saya dapat melakukan syncdb, tetapi tidak dapat membuat subjek baru.
Apakah ini mungkin di Django, memiliki fungsi yang dapat dipanggil memberikan default untuk beberapa bidang berdasarkan nilai dari bidang lain?
(Bagi yang penasaran, alasan saya ingin memisahkan inisial toko saya secara terpisah adalah dalam kasus yang jarang terjadi di mana nama belakang yang aneh mungkin berbeda dari yang saya lacak. Misalnya, orang lain memutuskan bahwa Subjek 1 Bernama inisial "John O'Mallory" adalah "JM" bukan "JO" dan ingin memperbaiki mengeditnya sebagai administrator.)
super().save(*args, **kwargs)
(tanpaSubject, self
argumen) seperti pada contoh di dokumentasi yang direferensikan.