J'ai un format de modèle en ligne, et je voudrais faire des champs non modifiables si ces champs ont déjà des valeurs lorsque la page est chargée. Si l'utilisateur clique sur un bouton "Modifier" de cette ligne, il deviendrait éditable et (à l'aide de JavaScript), je remplacerais les widgets d'origine par des éléments modifiables. J'aimerais faire quelque chose comme ça lors du chargement de la page: Je vois que inlineformset_factory code> a un argument appelé
formfield_callback code>. Je soupçonne que cela pourrait être utile, mais donc pour que je n'ai trouvé aucune documentation pour cela. Quelqu'un peut-il me dire une documentation utile pour cela et comment cela peut m'aider à résoudre ce problème? P> P>
5 Réponses :
Je pense que vous pourrez peut-être remplacer la fonction initiale de votre formulaire utilisé dans un format. Là, vous pouvez vérifier pour initial_data et construire dynamiquement vos formulaires comme si vous espérez faire. Au moins, cela semble plausible dans ma tête. P>
Eh bien, je devrais vérifier un objet d'instance, pas initial_data, mais je vois ce que vous dites. Problème est, que dois-je faire de là? Comment modifier les widgets de champ à partir de la méthode init B> de Modelform?
J'ai eu une question où je voulais " Générer des champs de formulaire ", peut trouver une solution pour créer de manière dynamique des formulaires, cela peut aider: p>
Ouais, en utilisant JavaScript, c'est mon retour. Je préférerais ne pas faire cela, si je peux construire les formes comme je les souhaite sur le serveur. Je devrais être capable de faire ça; C'est juste une question de finagling Django à me permettre un type de personnalisation.
Celui-ci m'a complètement soulevé un peu aussi. Espérons que c'est ce que vous recherchez.
<TABLE> <form method="post" action="."> {{ formset.management_form }} {% for form in formset.forms %} {{ form.id }} <tr> <td>{{ form.FirstName }}</td> <!-- This is a normal, editable field --> <td>{{ form.instance.LastName }}</td> <!-- 'instance' is your actual Django model. LastName displays the text from the last name field --> </tr> {% endfor %} </form> </TABLE>
Pour moi, appeler à partir de.Iitial.Last Nom code> aurait fait le tour.
Ce fil est un peu vieux, mais pour ceux qui cherchent:
sous la forme: P>
$('input.disabled').click(function(){ $(this).removeAttr('readonly').removeClass('disabled'); });
Cela pourrait être un problème de sécurité. Utilisez les outils de développement dans le navigateur pour supprimer l'attribut «désactivé» et tout à coup, le champ est modifiable. Vous devez vous assurer que le back-end sait également qu'il devrait ignorer les modifications apportées au champ.
form.instance.lastname affichera la valeur et le formulaire.Initial.lastname montrera la clé primaire. P>