2017-02-20 3 views
0

Ich habe ein Modell mit einem schema.Date Mitglied mit einer Beschränkung auf seinen maximal zulässigen Wert. Die Validierung funktioniert korrekt, aber ich muss eine andere Übersetzung für den generierten Fehler anzeigen.Wie kann ich Validierungsfehlermeldungen in Woost anpassen?

Kann ich die Übersetzung des cocktail.schema.exceptions.MaxValueError Fehlers für mein Modell anpassen?

+0

Versuchen Sie es und lassen Sie uns wissen, was passiert. – feedMe

Antwort

0

Es kann getan werden, aber die genaue Prozedur ändert sich ein wenig nach 2.11 "Pacman" und neuere Versionen. Es kann sich auch ein wenig verworren fühlen, wenn Sie nicht wissen, wie Cocktail Übersetzungen für Schema-Mitglieder erhält.

Sie wollen dieses Muster eine Übersetzung Schlüsselanpassung definieren:

Pacman und neue:

myapp.models.mymodule.MyModel.members.my_member.errors.cocktail.schema.exceptions.MaxValueError 

ältere Versionen:

MyModel.my_member-error: cocktail.schema.exceptions.MaxValueError 

Beachten Sie, wie der Schlüssel komponiert die Name Ihres Mitglieds mit dem Typ der Ausnahme, die Sie definieren möchten Beschreibung für. Beachten Sie, dass die Pacman-Konvention zwar im Vergleich zu den in früheren Versionen verwendeten kompakteren Mustern zu lang ist, dass sie jedoch einen angemessenen Namespacing verwendet, um Namenskollisionen zu vermeiden. Darüber hinaus nutzt sie das neue .strings-Dateiformat schreiben Sie etwas wie folgt aus:

[myapp.models.mymodule.MyModel] 

    [members] 

     [my_member] 
     # Your member's name, and other related strings 

      [errors] 
      # You can put all your error customizations here 

       [cocktail.schema.exceptions.MaxValueError] 
       en: Member XYZ is too high! 
       es: El campo XYZ es demasiado grande! 

Das Äquivalent auf ältere Versionen sein würde, die folgenden auf Ihrer strings.py Datei hinzuzufügen:

translations.define(
    "MyModel.my_member-error: cocktail.schema.exceptions.MaxValueError", 
    en = u"Member XYZ is too high!", 
    es = u"El campo XYZ es demasiado grande!" 
) 

Unabhängig davon, welche Version Sie verwenden, können Sie einen Blick an der cocktail.schema.Member.translate_error Methode, um zu sehen, was Cocktail unter der Haube tut, um die Übersetzung zu erhalten.

Wenn Sie mit Validierungsfehlern arbeiten, verwenden Sie wahrscheinlich einen Schemaadapter. Wenn dies der Fall ist, sollten Sie überlegen, ob Ihre benutzerdefinierte Übersetzung zum Modell oder zu Ihrem angepassten Formularschema gehört, je nachdem, ob Ihre Anpassung für jedes Szenario geeignet ist, in dem dieses Feld den Fehler verursacht oder ob es nur sinnvoll ist besondere Form. Wenn Sie es auf Ihr Formular beschränken möchten, ersetzen Sie myapp.models.MyModel durch den qualifizierten Namen Ihres Formulars.

Schließlich können Sie eine dynamische Übersetzung verwenden möchten, enthalten Details aus dem Fehlerobjekt in Ihre Übersetzung:

Pacman und neuer:

[myapp.models.mymodule.MyModel] 

    [members] 

     [my_member] 
     # Your member's name, and other related strings 

      [errors] 
      # You can put all your error customizations here 

       [cocktail.schema.exceptions.MaxValueError(member, error)] 
       en: Member t{member} is too high! The maximum permitted value is ${member.translate_value(error.max)} 
       es: El campo t{member} es demasiado grande! El valor máximo permitido es ${member.translate_value(error.max)} 

Ältere Versionen:

translations.define(
    "MyModel.my_member-error: cocktail.schema.exceptions.MaxValueError", 
    en = lambda instance: u"Member %s is too high! The maximum allowed value is %s" % (translations(instance.member, instance.member.translate_value(instance.max))), 
    es = lambda instance: u"El campo %s es demasiado grande! El valor máximo permitido es %s" % (translations(instance.member, instance.member.translate_value(instance.max))), 
) 
+0

Hallo Marti, vielen Dank für Ihre ausführliche Erklärung. Meine benutzerdefinierte Fehlerübersetzung funktioniert wie ein Zauber! – javimarrero

Verwandte Themen