Ich habe ein Django-Formular mit einem RegexField
, das einem normalen Texteingabefeld sehr ähnlich ist.
Meiner Ansicht nach möchte ich es unter bestimmten Bedingungen vor dem Benutzer verbergen und versuchen, das Formular so ähnlich wie möglich zu halten. Was ist der beste Weg, um dieses Feld in ein HiddenInput
Feld zu verwandeln ?
Ich weiß, dass ich Attribute auf dem Feld festlegen kann mit:
form['fieldname'].field.widget.attr['readonly'] = 'readonly'
Und ich kann den gewünschten Anfangswert einstellen mit:
form.initial['fieldname'] = 'mydesiredvalue'
Dies ändert jedoch nichts an der Form des Widgets.
Was ist der beste / am meisten "django-y" / am wenigsten "hackige" Weg, um dieses Feld zu einem <input type="hidden">
Feld zu machen ?
quelle
"" is not a valid value for a primary key.
Nach Verwendung dieser Lösung erhalte ich eine Methode in der is_valid-Methode.from django import forms
hidden_field_name = forms.CharField(label='reset', max_length=256, widget=forms.HiddenInput())
wobei der Schlüssel am Ende die neuere Widget-Syntax ist. Optimieren Sie für Ihre Bedürfnisse.Dies kann auch nützlich sein:
{{ form.field.as_hidden }}
quelle
Eine Option, die für mich funktioniert hat. Definieren Sie das Feld im Originalformular wie folgt:
Wenn Sie es dann in der neuen Klasse überschreiben, behält es seinen Platz.
quelle
Erstens, wenn Sie nicht möchten, dass der Benutzer die Daten ändert, erscheint es sauberer, das Feld einfach auszuschließen. Wenn Sie es als verstecktes Feld einfügen, werden einfach mehr Daten hinzugefügt, die über das Netzwerk gesendet werden sollen, und ein böswilliger Benutzer wird aufgefordert, diese zu ändern, wenn Sie dies nicht möchten. Wenn Sie einen guten Grund haben, das Feld einzuschließen, es aber auszublenden, können Sie dem Konstruktor der Modellform ein Schlüsselwort arg übergeben. So etwas vielleicht:
Dann aus Ihrer Sicht:
Ich bevorzuge diesen Ansatz, um die Interna der Modellform in der Ansicht zu ändern, aber es ist Geschmackssache.
quelle
class Meta: exclude = ["fieldname"]
. Das Problem hierbei ist, dass der Meta-Ansatz "statisch" ist, aber ich brauche etwas Dynamisches. Siehe stackoverflow.com/questions/20243735/…Für normale Form können Sie tun
Wenn Sie ein Modellformular haben, können Sie Folgendes tun
Sie können die
__init__
Methode auch überschreibenquelle
Wenn das Feld immer ausgeblendet werden soll, verwenden Sie Folgendes:
quelle
Sie können einfach CSS verwenden:
Dadurch werden das Feld und seine Beschriftung unsichtbar.
quelle