У меня есть модель, в которой я хотел бы содержать имя субъектов и их инициалы. (Данные несколько анонимизированы и отслеживаются по инициалам.)
Прямо сейчас я написал
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", и я хочу исправить это, отредактируйте его от имени администратора.)