2010-09-26 7 views
4

Je voudrais changer le champ de téléchargement par défaut (FileField) dans un formulaire inlineformset_factory, pour utiliser le AdminFileWidget de django.contrib.admin.widgets. Le but de ceci est d'afficher le chemin du fichier actuellement téléchargé comme il le fait dans les formulaires d'administration (peut-être y at-il une autre façon de le faire quand même?).Remplacer le widget FileField dans InlineFormset_factory?

Je n'ai aucun problème à faire fonctionner le widget en utilisant un formulaire personnalisé, je n'arrive pas à comprendre comment changer le widget dans un inlineformset_factory.

Répondre

10

Vous obtiendrez le widget Admin FileField au lieu du widget standard avec 5 champs supplémentaires.

views.py

MySpecialFormset = inlineformset_factory( MyParentModel, 
              MyChildModel, 
              form=MyChildModelForm, 
              extra=5) 

formset = MySpecialFormset(instance=myparentmodelinstance) #add request.POST and request.FILES if used on the POST cycle 

forms.py

from django.contrib.admin.widgets import AdminFileWidget 

class MyChildModelForm(forms.ModelForm): 

    class Meta: 
     model = MyChildModel 

    def __init__(self, *args, **kwargs): 
     super(MyChildModelForm, self).__init__(*args, **kwargs) 

     self.fields['my_file_field'].widget = AdminFileWidget() 
+0

Ah grand, merci stevejalim, je ne l'avais pas vu que vous pouvez ajouter le formulaire dans l'instance inline_formset. ça fonctionne parfaitement maintenant. – HdN8