2014-01-08 11 views
7

Die Django-Dokumentation erläutert, wie die Anpassung von Etiketten in einer ModelForm-Modellkarte hier verwendet wird: https://docs.djangoproject.com/en/dev/topics/forms/modelforms/. Allerdings, wenn ich versuche, es zu folgen erhalte ich die Fehlermeldung:Django ModelForm-Etikettenanpassung

name '_' is not defined. 

Was mache ich falsch?

Auch warum sollte ein _ Symbol vor der Klammer sein?

Hier ist mein Code:

class RuleForm(ModelForm): 
    def __init__(self, *args, **kwargs): 
     super(ModelForm, self).__init__(*args, **kwargs) 
     self.css_class = "rule" 

    class Meta: 
     model = Rule 
     fields = ("user", "title") 
     exclude = ("user") 
     widgets = { 
      "title" : TextInput(attrs={"class" : "title"}), 
     } 
     labels = { 
      "title": _("Rule Title"), 
     } 

Antwort

6

Haben Sie importieren zu folgen?

from django.utils.translation import ugettext_lazy as _ 

ugettext werden ugettext_lazy verwendet Übersetzungs-Strings angeben. _ wird verwendet, um Typisierungen zu speichern.

Siehe Translation | Django documentation.

+1

Es wird die Fehlermeldung los, aber es zeigt immer noch den Standardtitel, anstatt den angegebenen Titel. In der Tat brauche ich hier keine Übersetzer, ich könnte nur tun: labels = {"title": "Rule Title",}, aber es gibt mir immer noch den Standardtitel und nicht "Rule Title". – jazzblue

+0

@GregoryR, Vergewissern Sie sich, dass Sie Django 1.6+ verwenden. Die Option "Labels" wurde in Django 1.6 hinzugefügt. Siehe [Erstellen von Formularen aus Modellen | Django Dokumentation - Überschreibe die Standardfelder] (https://docs.djangoproject.com/de/1.6/topics/forms/modelforms/#overriding-the-default-fields) – falsetru

+1

@GregoryR, BTW, 'super (ModelForm, self) .__ init __ (* args, ** kwargs) 'sollte' super sein (RuleForm, self) .__ init __ (* args, ** kwargs) '. 'exclude = (" user ")' -> 'exclude = (" user ",)' oder 'exclude = [" user "]'. – falsetru

1

Ich habe Django 1.6 und ich habe die gleichen Probleme wie 'GregoryR'. Ich habe nicht versucht, _ugettext_lazy als _ zu importieren. Stattdessen tat ich dies dem einfachen Weg (letzte Zeile):

def __init__(self, *args, **kwargs): 
    super(ModelForm, self).__init__(*args, **kwargs) 
    self.css_class = "rule" 
    self.fields['title'].label = 'Rule Title' <----- 
8

Wenn jemand anderes für sie zu diesem Zeitpunkt (2016 - Django 1.9) sucht

Es funktioniert genau wie das für mich:

labels = { 
      "title": "Rule Title", 
      "other_field": "Other Title" 
     } 

Mit dem faulen Import.

Verwandte Themen