У меня есть модель, в которой я хотел бы содержать имена субъектов и их инициалы (данные несколько анонимны и отслеживаются по инициалам).
Прямо сейчас я написал
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, если вызываемая функция дает значение по умолчанию для некоторого поля на основе значения другого поля?
(Для любопытных, причина, по которой я хочу разделить инициалы своего магазина отдельно, заключается в редких случаях, когда странные фамилии могут отличаться от тех, которые я отслеживаю. Например, кто-то другой решил, что инициалы Субъекта 1 с именем «Джон О'Мэллори» являются "JM", а не "JO", и хочет исправить, отредактируйте его как администратор.)
super().save(*args, **kwargs)
(безSubject, self
аргументов), как в примере в указанной документации.