2010-05-20 8 views
1

J'ai ce modèle exemple de travail avec l'administrateurModifier sur la volée verbose_name dans un champ modèle sur django admin

class Author(models.Model): 
    name = models.CharField(_('Text in here'), max_length=100) 

avec verbose_name défini comme ugettext_lazy « Texte ici », mais parfois, selon la site_id je veux présenter un diferent nom verbeux, donc j'ai modifié le initialisation de cette manière

def __init__(self, *args, **kwargs): 
    super(Author, self).__init__(*args, **kwargs) 
    #some logic in here 
    self._meta.get_field('name').verbose_name = _('Other text') 

Il fonctionne, l'affichage du « Autre texte » au lieu du « texte ici » ... à l'exception du très La première fois que l'affichage auteur/ajout est utilisé.

¿Est-ce la bonne façon de le faire? ¿Comment puis-je résoudre le problème de la première fois?

Merci à l'avance

Répondre

3

Ne pas modifier les éléments du modèle. Il y a toutes sortes de métaclasses dans les définitions de modèles qui vont casser des choses, comme vous l'avez découvert.

À la place, définissez un formulaire personnalisé et modifiez le libellé du champ dans la méthode __init__.

+0

Parfait. Lorsque j'ai créé le formulaire personnalisé, le verbose_name est affiché correctement. Même cela fonctionne si je fais les changements dans le modèle, mais comme vous l'avez suggéré im déplacer toute la personnalisation à la forme pour éviter de casser des choses. Merci beaucoup – PerroVerd

Questions connexes