2013-10-11 6 views
3

장고 관리 양식에 업로드 된 파일을 처리해야합니다. 양식에 파일 업로드 필드를 추가했습니다.django ModelAdmin의 인라인 데이터에 액세스하는 방법

class ExampleInline(admin.TabularInline): 
    model = OtherExample 
    extra = 1 
class ExampleForm(forms.ModelForm): 
    filedata = forms.FileField() 
    class Meta: 
     model = ExampleModel 
class ExampleModelAdmin(admin.ModelAdmin): 
    form = ExampleForm 
    inlines = [ExampleInline,] 

이 양식을 렌더링하고 싶은대로 정확하게 렌더링합니다. 요청에서 반환 된 데이터가 정확히 내가 원하는 것입니다.

문제는 인라인의 내용에 액세스하려고하는 것입니다.

class ExampleAdmin(admin.ModelAdmin): 
... 
def save_model(self, Request, obj, form, change): 
    the_file = form.cleaned_data['filedata'] 
    # do amazing things to contents of file 

이 시점에서 나는 사용자가 인라인에서 선택한 결과를 참조하고자합니다. OtherExample에 대해 그들이 선택한 것이 무엇이든간에.

양식을 통해 어떻게 액세스합니까? 나는 요청을 거치지 않고 그것을 기꺼이 원한다. 나는 또한 검사 할 의향이 있습니다. 양식을 저장 한 후에 호출 되어도 객체를 두 번 저장하게 될 것이지만 save_related(self,request, form, formset, change)

답변

6

save_related이 작업을 수행 할 수 있습니다. 개체에 form.instance 또는 formset.instance으로 액세스 할 수 있습니다.

def save_related(self, request, form, formsets, change): 
    obj = form.instance 
    # whatever your formset dependent logic is to change obj.filedata 
    obj.save() 
    super(ExampleAdmin, self).save_related(request, form, formsets, change) 
+0

감사합니다. 나는 'save_related'를 사용해야 만했지만 'formset'에서'OtherExample'은 어디에 있습니까? – ctjctj2

+0

인라인 formset에서 데이터를 읽는다면 각 양식에 대한'cleaned_data' dict를 보길 원할 것입니다. 또는 내장 된'save_related'와'save_formset'을 완전히 오버라이드하여 formset 저장 결과를 캡쳐 할 수 있습니다.이 설정은 변경되거나 생성 된'OtherExample' 인스턴스가 될 것입니다. –

+0

그 것이었다 :'formset [0] .cleaned_data'는'save_related()'에 필요한 데이터를 가지고 있습니다. 고맙습니다 – ctjctj2

관련 문제