7
votes

Django: Comment faire des champs non modifiables par défaut dans un format de modèle en ligne?

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: xxx

Je vois que inlineformset_factory a un argument appelé formfield_callback . 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?


0 commentaires

5 Réponses :


0
votes

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.


1 commentaires

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 de Modelform?




18
votes

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>


1 commentaires

Pour moi, appeler à partir de.Iitial.Last Nom aurait fait le tour.



7
votes

Ce fil est un peu vieux, mais pour ceux qui cherchent:

sous la forme: P>

$('input.disabled').click(function(){
    $(this).removeAttr('readonly').removeClass('disabled');
});


1 commentaires

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.



0
votes

form.instance.lastname affichera la valeur et le formulaire.Initial.lastname montrera la clé primaire.


0 commentaires