Tengo un modelo que me gustaría incluir el nombre de un sujeto y sus iniciales. (Los datos son un tanto anónima y rastreado por las iniciales.)Campo Django modelo predeterminado basado en otro campo en el mismo modelo
En este momento, escribí
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)
Como se indica en la última línea, yo preferiría ser capaz de tener las iniciales en realidad se almacenan en el base de datos como un campo (independiente del nombre), pero que se inicializa con un valor predeterminado basado en el campo de nombre. Sin embargo, tengo problemas ya que los modelos django no parecen tener un "yo".
Si cambio la línea a subject_init = models.CharField("Subject initials", max_length=2, default=subject_initials)
, puedo hacer el syncdb, pero no puedo crear nuevos sujetos.
¿Esto es posible en django, teniendo una función invocable dar un valor predeterminado a un campo basado en el valor de otro campo?
(Para los curiosos, la razón por la que quiero separar las iniciales de mi tienda por separado es en casos raros donde los apellidos extraños pueden ser diferentes a los que estoy rastreando. Por ejemplo, alguien más decidió que el sujeto 1 llamado "John O" Mallory" son las iniciales 'JM' en lugar de 'JO' y quiere arreglar editarlo como administrador)
Has importado '' 'post_save''' en lugar de' 'pre_save'''. – arkocal
@arkocal: gracias por el aviso, solo lo corrigieron. Puede sugerir ediciones usted mismo en tales casos, ayuda a arreglar cosas como esta :) –