Ho un modello che vorrei contenere un nome di soggetti e le loro iniziali (i dati sono in qualche modo resi anonimi e tracciati dalle iniziali).
In questo momento, ho scritto
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)
Come indicato dall'ultima riga, preferirei che le iniziali vengano effettivamente memorizzate nel database come un campo (indipendentemente dal nome), ma che viene inizializzato con un valore predefinito basato sul campo del nome. Tuttavia, ho problemi perché i modelli django non sembrano avere un "sé".
Se cambio la linea in subject_init = models.CharField("Subject initials", max_length=2, default=subject_initials)
, posso fare il syncdb, ma non posso creare nuovi soggetti.
È possibile in Django, avendo una funzione richiamabile che assegna un valore predefinito a un campo in base al valore di un altro campo?
(Per i curiosi, il motivo per cui desidero separare le iniziali del mio negozio separatamente è in rari casi in cui cognomi strani possono avere diversi da quelli che sto monitorando. Ad esempio, qualcun altro ha deciso che le iniziali del Soggetto 1 denominato "John O'Mallory" sono "JM" anziché "JO" e desidera correggerlo modificandolo come amministratore.)
super().save(*args, **kwargs)
(senza gliSubject, self
argomenti) come nell'esempio nella documentazione di riferimento.