Переопределить виджет FileField в InlineFormset_factory? - PullRequest
4 голосов
/ 26 сентября 2010

Я хотел бы изменить поле загрузки по умолчанию (FileField) в форме inlineformset_factory, чтобы использовать AdminFileWidget из django.contrib.admin.widgets. Цель этого - показать путь к загруженному в настоящий момент файлу, как это делается в формах администратора (возможно, есть другой способ сделать это в любом случае?).

У меня нет проблем с тем, чтобы заставить виджет работать, используя пользовательскую форму, просто не могу понять, как изменить виджет в inlineformset_factory.

1 Ответ

10 голосов
/ 27 сентября 2010

Вы получите виджет Admin FileField вместо стандартного с 5 дополнительными полями.

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() 
...