J'ai un formulaire Django avec un RegexField
, qui est très similaire à un champ de saisie de texte normal.
À mon avis, dans certaines conditions, je veux le cacher à l'utilisateur et essayer de garder le formulaire aussi similaire que possible. Quelle est la meilleure façon de transformer ce champ en HiddenInput
champ?
Je sais que je peux définir des attributs sur le terrain avec:
form['fieldname'].field.widget.attr['readonly'] = 'readonly'
Et je peux définir la valeur initiale souhaitée avec:
form.initial['fieldname'] = 'mydesiredvalue'
Cependant, cela ne changera pas la forme du widget.
Quelle est la meilleure / la plus "django-y" / la moins "hacky" façon de faire de ce champ un <input type="hidden">
champ?
"" is not a valid value for a primary key.
dans la méthode is_valid après avoir utilisé cette solution.from django import forms
hidden_field_name = forms.CharField(label='reset', max_length=256, widget=forms.HiddenInput())
où la clé est la nouvelle syntaxe de widget à la fin. Ajustez pour vos besoins.Cela peut également être utile:
{{ form.field.as_hidden }}
la source
une option qui a fonctionné pour moi, définissez le champ dans le formulaire d'origine comme:
puis lorsque vous le remplacez dans la nouvelle classe, il conservera sa place.
la source
Premièrement, si vous ne voulez pas que l'utilisateur modifie les données, il semble plus simple d'exclure simplement le champ. L'inclure en tant que champ caché ajoute simplement plus de données à envoyer sur le fil et invite un utilisateur malveillant à le modifier lorsque vous ne le souhaitez pas. Si vous avez une bonne raison d'inclure le champ mais de le masquer, vous pouvez passer un mot-clé arg au constructeur du modelform. Quelque chose comme ça peut-être:
Ensuite, à votre avis:
Je préfère cette approche à la modification des éléments internes du modèle dans la vue, mais c'est une question de goût.
la source
class Meta: exclude = ["fieldname"]
. Le problème ici est que la méta-approche est "statique", mais j'ai besoin de quelque chose de dynamique. Voir stackoverflow.com/questions/20243735/…Pour une forme normale, vous pouvez faire
Si vous avez un formulaire modèle, vous pouvez faire ce qui suit
Vous pouvez également remplacer la
__init__
méthodela source
Si vous souhaitez que le champ soit toujours masqué, utilisez ce qui suit:
la source
Vous pouvez simplement utiliser css:
Cela rendra le champ et son étiquette invisibles.
la source