2010-11-24 5 views
3

Ich möchte Kontexthilfe für die Eingabefelder in meinen Formularen bereitstellen ("Vorname": "Ihr Vorname. Bitte geben Sie alle ein, wenn Sie mehrere haben."). Anstatt sie im Quellcode hart zu codieren, möchte ich diese Hilfetexte über die Admin-Schnittstelle editierbar machen. Meine Idee ist, die Feldklasse irgendwie zu erweitern (ein neues Attribut ähnlich verbose_name aufzunehmen) und das in der Datenbank zu speichern (wahrscheinlich würde eine dreispaltige Tabelle 'Modell, Feld, Hilfe' ausreichen).Wie kann ich einem Django-Feld eine zusätzliche Beschreibung hinzufügen, die in der Datenbank gespeichert wird?

Ich weiß jedoch nicht, ob das machbar ist oder vorher gemacht wurde. Machst du? Könnten Sie mir etwas geben, wo ich anfangen könnte, wenn es nicht gewesen ist?

Antwort

3

Jedes Feld in einem Formular enthält bereits help_text, obwohl es als ein Parameter in dem Feld in der Form-Klasse deklariert werden sollte.

Z. B.

class SomeForm(forms.Form): 
    some_field1 = forms.CharField(verbose_name="Some Field 1", max_length=100, help_text="Please the first field.") 
    some_field2 = forms.CharField(verbose_name="Some Field 2", max_length=100, help_text="Please the second field.") 

Ich persönlich sehe den Nutzen nicht in der Datenbank, die nicht in der auf das Gebiet gebunden Form.

EDIT:

So können Sie den Hilfetext außer Kraft setzen. Angenommen, Sie haben ein Wörterbuch für jedes Formular, das Sie in einem Formular überschreiben möchten.

my_form = SomeForm() 
for field_name, new_help_text in my_form_override_help_text_dict.items(): 
    my_form.fields[field_name].help_text = new_help_text 

und dann my_form dem Kontext hinzufügen, bevor es zu machen: Vor dem Kontext Rendering, können Sie das Formular mit dem Wörterbuch als solche neu verarbeiten.

Jetzt wo und wie Sie den Hilfetext speichern möchten, ist Ihre Wahl; zB Ihre Lösung einen ModelFieldHelp mit drei Textfeldern (Modellname, Feldname, Hilfetext) würde zu schaffen arbeitet, dann müssen Sie etwas wie

class ModelHelpField(models.Model): 
    model_name = CharField(max_length=50) 
    field_name = CharField(max_length=50) 
    new_help_text = CharField(max_length=50) 

field_help_qs= ModelHelpField.objects.filter(model_name='SomeModel') 
my_form_override_help_text_dict = dict([(mfh.field_name, mfh.new_help_text) for mfh in field_help_qs]) 

Nun kann es sinnvoll sein, diesen Prozess zu automatisieren für all Modelle dass Sie Formulare erstellen, indem Sie eine Funktion in der Form oder dem Modell definieren, die diese ModelHelpFields automatisch erstellt (falls nicht definiert) und sich nach der Initialisierung mit dem aktuellen Hilfetext aktualisiert ...

+0

Danke für den Zeiger, das habe ich verpasst ein. Der Vorteil des Speicherns von Hilfetexten in der Datenbank besteht darin, dass ich keine Quellen ändern muss, wenn die Verantwortlichen für das Schreiben von Hilfetexten diese ändern möchten. Ich brauche auch keine Releases, wenn sich diese Texte ändern. –

+0

Ich denke, das macht Sinn, aber da das Eingabefeld nicht geändert wird (zB Name ist nicht editierbar, Länge nicht editierbar, Reihenfolge nicht editierbar), bin ich nicht sicher, ob es sinnvoll ist, die Hilfe dynamisch zu bearbeiten Text. Vielleicht haben sie die Vorlage bearbeiten? Aber wie auch immer, es kann auf hackische Art und Weise geschehen; Ich werde in Kürze bearbeiten. –

+0

Ich sehe den Vorteil, es in der Datenbank und nicht in der Form zu haben, die an das Feld gebunden ist, da ich sie verwende, um dynamische Tabellen zu erstellen. – Logic1

Verwandte Themen