サブジェクト名とそのイニシャルを含めたいモデルがあります(データはやや匿名化され、イニシャルによって追跡されます)。
今、私は書いた
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で可能ですか?呼び出し可能な関数に、別のフィールドの値に基づいていくつかのフィールドにデフォルトを与えることはできますか?
(奇妙なことに、私が店のイニシャルを別々に分けたい理由は、奇妙な姓が追跡しているものと異なる場合があるまれなケースです。たとえば、他の誰かが「John O'Mallory」という名前のイニシャルは「JO」ではなく「JM」を修正し、管理者として修正したいと考えています。)
super().save(*args, **kwargs)
(Subject, self
引数なしで)呼び出すことができることに注意してください。