Changer de casse (haut / bas) lors de l'ajout de données via le site d'administration de Django
Question
Je suis en train de configurer le site d'administration de mon nouveau projet, et j'ai un petit doute sur la marche à suivre pour cliquer sur "Enregistrer" lors de l'ajout de données via le site d'administration: tout est converti en majuscule ...
Modifier: OK, je connais la propriété .upper, et j’ai fait une vue. Je saurais le faire, mais je me demande s’il existe une propriété disponible pour la configuration du champ sur le site d’administration: P
La solution
Si vous souhaitez uniquement convertir les éléments en majuscules lors de l'enregistrement dans la section admin, vous souhaiterez créer un formulaire avec validation personnalisée pour modifier la casse:
class MyArticleAdminForm(forms.ModelForm):
class Meta:
model = Article
def clean_name(self):
return self.cleaned_data["name"].upper()
Si votre objectif est de toujours avoir la valeur en majuscule, vous devriez alors remplacer la sauvegarde dans le champ de modèle:
class Blog(models.Model):
name = models.CharField(max_length=100)
def save(self, force_insert=False, force_update=False):
self.name = self.name.upper()
super(Blog, self).save(force_insert, force_update)
Autres conseils
Un exemple mis à jour dans la documentation suggère d'utiliser args, kwargs pour passer en tant que:
Django étendra de temps en temps les capacités des logiciels intégrés. méthodes de modèle, ajout de nouveaux arguments. Si vous utilisez * args, ** kwargs dans vos définitions de méthode, vous êtes assuré que votre code sera prend automatiquement en charge ces arguments lorsqu'ils sont ajoutés.
class Blog(models.Model):
name = models.CharField(max_length=100)
tagline = models.TextField()
def save(self, *args, **kwargs):
do_something()
super(Blog, self).save( *args, **kwargs) # Call the "real" save() method.
do_something_else()
vous devez annuler la sauvegarde ( ) . Un exemple tiré de la documentation:
class Blog(models.Model):
name = models.CharField(max_length=100)
tagline = models.TextField()
def save(self, force_insert=False, force_update=False):
do_something()
super(Blog, self).save(force_insert, force_update) # Call the "real" save() method.
do_something_else()