Bir denek adı ve baş harflerini içermesini istediğim bir modelim var (veriler bir şekilde anonimleştirilir ve baş harflerle izlenir).
Şimdi yazdım
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)
Son satırda belirtildiği gibi, baş harflerin veritabanında bir alan olarak (addan bağımsız olarak) depolanmasını tercih ederim, ancak bu ad alanına dayalı bir varsayılan değerle başlatılır. Ancak, django modellerinin bir 'benliği' olmadığı için sorunlar yaşıyorum.
Satırı olarak değiştirirsem, subject_init = models.CharField("Subject initials", max_length=2, default=subject_initials)
syncdb yapabilirim, ancak yeni konular yaratamam.
Bu Django'da mümkün müdür, çağrılabilir bir işleve sahip olmak, başka bir alanın değerine bağlı olarak bazı alanlara bir varsayılan değer verir mi?
(Merak edenler için, mağazamın baş harflerini ayrı ayrı ayırmak istememin nedeni, tuhaf soyadlarının izlediklerimden farklı olabileceği ender durumlarda. Örneğin, başka biri Konu 1 adlı Konu 1'in "John O'Mallory" "JO" yerine "JM" ve yönetici olarak düzenlemeyi düzeltmek istiyor.)
super().save(*args, **kwargs)
(Subject, self
argümanlar olmadan ) basitçe çağırabileceğinizi unutmayın .