2013-01-16 27 views
4

我正在使用Django,並試圖實現,我認爲,它是圖片上傳中相當常見的功能。我想生成一個formset(也許是modelformset?),用於爲用戶剛剛上傳的每個圖像添加標題(類似於「查看剛剛上傳的圖像」頁面)。Django:爲上傳圖片添加字幕的Formset

這是基本的想法:

我有一次提交的一個或多個圖像的簡單形式:

class UploadImageForm(forms.Form): 
    images = forms.FileField(widget=forms.ClearableFileInput(attrs={'multiple': 'multiple'})) 

它產生這樣的:

enter image description here

然後,在視圖中,我對POST中的每個圖像進行一些處理/處理,並存儲調整大小的v圖像作爲模型的實例版爲,稱爲ImageItem

class ImageItem(models.Model): 
    resized_img = models.ImageField(upload_to=img_get_file_path) 
    user = models.ForeignKey(User) 
    upload_date = models.DateTimeField(auto_now_add=True) 
    last_modified = models.DateTimeField(auto_now=True)  
    caption = models.CharField(max_length=1000, 
           blank=True) 

(這裏是UploadImage觀點,僅供參考......注意,一旦形式進行驗證和圖像已被保存在handle_uploaded_image功能,它重定向到一個視圖中添加一個標題的所有圖像。)

def UploadImageToLibrary(request): 
    if request.method == 'POST': 
     form = UploadImageForm(request.POST, request.FILES) 
     if form.is_valid(): 
      handle_uploaded_image(form) # creates new sizes of images, saves resized version as ImageItem instances 
      return AddInfoForImage(request) # SEND USER TO A PAGE FOR ADDING CAPTIONS TO EACH IMAGE...not sure what this next view should contain...? 
    else: 
     form = UploadImageForm() 
    return render_to_response('upload_item.html', {'form': form}, context_instance=RequestContext(request)) 

好吧,現在來了,我需要幫助的部分....

只要圖像保存,我希望下一個視圖爲每個已上傳的圖像生成一個表單,以便用戶可以爲圖像添加標題。當他們完成將所有信息添加到所有新圖像時,它們會打到submit,並將每個標題保存到適當的ImageItem實例。我不知道應該創建多少表單,這取決於用戶上傳了多少圖片。下面是我想要的表單集做一個視覺表現(忽略了其他的東西,我們可以繼續使用一個簡單的標題爲例):

enter image description here


具體來說,這是東西我需要幫助:

  • 我不知道如何提供的CaptionForm S的適當數量的基礎上,有多少圖像的用戶剛剛上傳。
  • 我不知道如何將相應的ImageItem.resized_img放置在它在模板中引用的窗體的左側。
  • 我不知道如何確保一旦CaptionForm被提交,我將字幕保存到適當的ImageItem實例。

我會想象這三個點可以以某種方式解決在一個formsetmodelformset解決方案?


就像我說的,這似乎是一個很常見的情況。如果有人知道任何現有的代碼,請告訴我。謝謝!

+0

你可能想尋找到表單嚮導進入調整後的圖像。 –

+0

@ThomasOrozco謝謝,現在看着他們......他們會允許我查詢從嚮導的第二頁發佈在嚮導第一頁上的已調整大小的圖像嗎?還是所有形式的巫師必須在最後發佈? – sgarza62

+0

恐怕我不夠熟悉他們告訴你這一點。我只是把它放在那裏,因爲多步驟的過程通常是嚮導的工作! :) –

回答