У мене є модель, в якій я хотів би містити ім’я суб’єктів та їхні ініціали (його дані дещо анонімізуються та відстежуються ініціалами).
Зараз я писав
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
аргументів), як у прикладі в документації, на яку посилаються.