J'ai un modèle que je voudrais contenir un nom de sujet et leurs initiales. (Les données sont quelque peu anonymisées et suivis par des initiales.)Champ de modèle Django par défaut basé sur un autre champ dans le même modèle
En ce moment, je l'ai écrit
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)
Comme l'indique la dernière ligne, je préférerais être en mesure d'avoir les initiales sont stockés en fait dans le base de données comme un champ (indépendant du nom), mais qui est initialisé avec une valeur par défaut basée sur le champ de nom. Cependant, j'ai des problèmes car les modèles django ne semblent pas avoir un 'soi'.
Si je change la ligne à subject_init = models.CharField("Subject initials", max_length=2, default=subject_initials)
, je peux faire la syncdb, mais je ne peux pas créer de nouveaux sujets.
Est-ce possible dans django, ayant une fonction appelable donne un champ par défaut basé sur la valeur d'un autre champ?
(Pour les curieux, la raison pour laquelle je veux séparer séparément les initiales de mon magasin est dans de rares cas où des noms de famille étranges peuvent avoir des différences avec ceux que je suis en train de suivre. Mallory » initiales sont « JM » plutôt que « JO » et veut fixer le modifier comme un administrateur)
Vous avez importé '' '' '' '' '' '' '' '' '' '' '' pre_save''' '' '' '' 'pre_save'''. – arkocal
@arkocal: merci pour les heads-up, juste réparés. Vous pouvez proposer vous-même des modifications dans de tels cas, cela aide à corriger des choses comme ça :) –