2012-06-13 2 views
0

Все объекты mymedia с сохранением одного и того же имени. как я могу это исправить?mutiple filename in django formset

#view.py 
if request.method == 'POST': 
    formset = MediaFormSet(request.POST, request.FILES) 
    if formset.is_valid(): 
     Page_key = Page.objects.get(pk=1) 
     slide = SlideshowComponent(page=Page_key, order=0, label="slideshow", x=0, y=0, width=0, height=0, viewport_type="simle_page", keywords="slideshow") 
     slide.save()  
     for filename, file in request.FILES.iteritems(): 
      name = request.FILES[filename].name    
     for form in formset.forms:   
      file_type = file.content_type 
      if file_type == "image/png" or file_type == "image/jpeg" or file_type == "image/gif": 
       newmedia = formset.save(commit=False) 
       newmedia.filename = name 
       newmedia.content_type = "photos" 
       newmedia.save() 

ответ

0

Вместо этого у меня есть 2, я делаю все только в одном.

for file in request.FILES.getlist('form-0-source'): 
    file_type = file.content_type 
    if file_type == "image/png" or file_type == "image/jpeg" or file_type == "image/gif": 
     name= file.name.split('.')[0] 
     newmedia = Media(source=file, filename=name, content_type = "photos", created='03/25/12') 
     newmedia.save()     
     image2 = ImageComponent(page=Page_key, order=0, label="imagem", x=0, y=0, width=0, height=0, viewport_type="simle_page", keywords="imagem", media=newmedia, is_slideshow='true') 
     image2.save() 
     slide.image.add(image2)     
    else: 
     return render_to_response('revista_digital/error.html', context_instance=RequestContext(request)) 
1

Я думаю, вы опустил подведением:

for filename, file in request.FILES.iteritems(): 
     name = request.FILES[filename].name    
     for form in formset.forms:   
      file_type = file.content_type 
      if file_type == "image/png" or file_type == "image/jpeg" or file_type == "image/gif": 
       newmedia = formset.save(commit=False) 
       newmedia.filename = name 
       newmedia.content_type = "photos" 
       newmedia.save() 

в противном случае он сохраняет всегда имя последнего файла, обрабатывается.

EDIT: на самом деле, я думаю, это не то, что вы хотите. Вы должны отслеживать уже обработанные формы formet.forms, а затем присваивать имя, которое соответствует вместе с formet.forms, который не был обработан.

+0

Если я сделаю это, я создам больше объектов, чем количество файлов, так как создание файла находится внутри двух циклов – Jacinto