Поле модели Django по умолчанию на основе другого поля в той же модели

У меня есть модель, в которой я хотел бы содержать имя субъектов и их инициалы. (Данные несколько анонимизированы и отслеживаются по инициалам.)

Прямо сейчас я написал

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 ("Инициалы субъекта", max_length = 2, default = subject_initials) , я смогу выполнить syncdb, но не смогу создавать новые темы.

Возможно ли это в django, когда вызываемая функция задает значение по умолчанию для некоторого поля на основе значения другого поля?

(Любопытно, что причина, по которой я хочу разделить инициалы своего магазина отдельно, в редких случаях, когда странно фамилии могут отличаться от тех, которые я отслеживаю. Например, кто-то другой решил, что Субъект 1 назван «Джон О'Мэллори» инициалы - "JM", а не "JO", и я хочу исправить это, отредактируйте его от имени администратора.)

79
задан dr jimbob 7 December 2010 в 19:43
поделиться