7
votes

Champs à réadonner au format Django

J'utilise ModelFormset usine pour générer de format de champs de modèle. Ici, je veux faire uniquement les objets QuerySet tels que loadonly et autres (formes supplémentaires) comme champs non lisonly

Comment puis-je atteindre cela? P>

      for form in formset.forms:
          form.fields['weight'].widget.attrs['readonly'] = True


0 commentaires

4 Réponses :


-2
votes

J'ai utilisé Python depuis longtemps. J'espère cela aide . Mais si vous souhaitez contrôler les champs d'affichage à l'aide de jQuery xxx

ou xxx


0 commentaires

12
votes

Je recommande de spécifier un formulaire à utiliser pour le modèle et, dans ce formulaire, vous pouvez définir les attributs que vous souhaitez lire uniquement.

#forms.py
class AuthorForm(forms.ModelForm):
    class Meta:
        model = Author

    def __init__(self, *args, **kwargs):
        super(AuthorForm, self).__init__(*args, **kwargs)
        if self.instance.id:
            self.fields['weight'].widget.attrs['readonly'] = True

#views.py
AuthorFormSet = modelformset_factory(Author, extra=2, form=AuthorForm)


5 commentaires

Ma question est de savoir comment je ne peux faire que des formulaires de queryset à des formulaires de manière réelle et non plus. Votre solution convertira tous les champs de formulaire tels que Readonly, y compris des champs supplémentaires également. Ici comment puis-je faire des champs de forme supplémentaires comme non lison et autres devraient être réadis


Consultez la déclaration si dans ma réponse modifiée. Je ne sais pas si c'est le moyen le plus propre de vérifier si le formulaire a une instance associée à celle-ci, mais cela fonctionne dans mes tests.


Je l'ai encore changé juste à partir de si 'id' in self.Initial à si auto.Instance.id qui devrait vraiment être la bonne façon de vérifier si le formulaire a une exemple


Mais j'ai observé que cela affectera JQuery Plugin que j'utilise pour ajouter de la forme dynamique


Ensuite, vous devez modifier le script pour rechercher des attributs réadonnants et les supprimer lors de la copie du formulaire. De plus, avec 'Extra', les 2 derniers formulaires ne doivent pas avoir une instance avec un identifiant, donc si vous copiez l'un d'entre eux, vous devriez être correct. Pouvez-vous publier votre script de formulaire clone?



0
votes

Il suffit de vérifier si l'instance a une pièce d'identité, comme ceci:

si auto.Instance.id

Avant de la définir comme lecture seule


0 commentaires

0
votes

Vous pouvez également mettre dans votre modèle: xxx

et ne pas mettre le readonly_field dans modelform.meta.fields.


0 commentaires