ฉันมีแบบจำลองที่ฉันต้องการมีชื่อวิชาและชื่อย่อของพวกเขา (ข้อมูลเขาค่อนข้างไม่ระบุตัวตนและติดตามด้วยชื่อย่อ)
ตอนนี้ฉันเขียน
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)
ตามที่ระบุไว้ในบรรทัดสุดท้ายฉันต้องการให้ชื่อย่อถูกเก็บไว้ในฐานข้อมูลเป็นฟิลด์ (ไม่ขึ้นกับชื่อ) แต่เริ่มต้นด้วยค่าเริ่มต้นตามฟิลด์ชื่อ อย่างไรก็ตามฉันมีปัญหาเนื่องจากนางแบบ django ดูเหมือนจะไม่มี 'ตัวเอง'
ถ้าฉันเปลี่ยนสายเป็นsubject_init = models.CharField("Subject initials", max_length=2, default=subject_initials)
ฉันจะทำ syncdb ได้ แต่สร้างวิชาใหม่ไม่ได้
เป็นไปได้ไหมใน Django การมีฟังก์ชันที่เรียกได้จะตั้งค่าเริ่มต้นให้กับบางฟิลด์ตามค่าของฟิลด์อื่นหรือไม่
(สำหรับคนที่อยากรู้อยากเห็นเหตุผลที่ฉันต้องการแยกชื่อย่อร้านค้าของฉันแยกต่างหากในบางกรณีที่ไม่ค่อยพบบ่อยนักที่นามสกุลแปลก ๆ อาจแตกต่างจากชื่อที่ฉันกำลังติดตามอยู่เช่นมีคนอื่นตัดสินใจว่า Subject 1 ชื่อชื่อย่อ "John O'Mallory" คือ "JM" มากกว่า "JO" และต้องการแก้ไขแก้ไขในฐานะผู้ดูแลระบบ)
super().save(*args, **kwargs)
(โดยไม่มีSubject, self
อาร์กิวเมนต์) ดังตัวอย่างในเอกสารอ้างอิง