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
4 Réponses :
J'ai utilisé Python depuis longtemps. J'espère ou p>
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)
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 code> à
si auto.Instance.id code> 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?
Il suffit de vérifier si l'instance a une pièce d'identité, comme ceci: Avant de la définir comme lecture seule p>
si auto.Instance.id code> p>
Vous pouvez également mettre dans votre modèle: et ne pas mettre le readonly_field dans modelform.meta.fields. p> p>