Ich habe ein Modell, das einen Betreffnamen und deren Initialen enthalten soll (die Daten sind etwas anonymisiert und werden durch Initialen verfolgt).
Im Moment habe ich geschrieben
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)
Wie in der letzten Zeile angegeben, würde ich es vorziehen, wenn die Initialen tatsächlich als Feld (unabhängig vom Namen) in der Datenbank gespeichert werden, dies wird jedoch mit einem Standardwert initialisiert, der auf dem Namensfeld basiert. Ich habe jedoch Probleme, da Django-Modelle kein "Selbst" zu haben scheinen.
Wenn ich die Zeile in subject_init = models.CharField("Subject initials", max_length=2, default=subject_initials)
ändere, kann ich die Synchronisierung durchführen, aber keine neuen Themen erstellen.
Ist dies in Django möglich, wenn eine aufrufbare Funktion einem Feld einen Standardwert gibt, der auf dem Wert eines anderen Felds basiert?
(Für Neugierige ist der Grund, warum ich meine Geschäftsinitialen separat trennen möchte, in seltenen Fällen, in denen seltsame Nachnamen andere als die von mir verfolgten haben. ZB hat jemand anderes entschieden, dass die Initialen von Betreff 1 mit dem Namen "John O'Mallory" lauten "JM" statt "JO" und möchte es als Administrator bearbeiten.)
super().save(*args, **kwargs)
(ohne dieSubject, self
Argumente) wie im Beispiel in der Dokumentation aufrufen können .