0

我想上傳Django的工作。當我嘗試上載它時,我沒有遇到錯誤,並且新項目已保存,但沒有圖像。其他表格數據都在那裏。過去兩天我一直在使用Google和堆棧溢出,並且找不到修復程序。我甚至不知道它出錯的地方!任何建議都會很棒。非常感謝。 :)Django形式上傳圖像 - 形式數據作品除了圖像

從views.py:

if request.method == 'POST': 
     form = ItemForm(request.POST, request.FILES, user=request.user, forsale=True) 
     if form.is_valid(): 
      new_item = form.save() 
      return item_view(request, marketplace_id, new_item.id) 
    else: 
     form = ItemForm(user=request.user) 

從models.py:

class Item(models.Model): 

    photo = StdImageField(upload_to='images/', blank=True, size=(500, 500, True), thumbnail_size=(210, 150, True)) 

    user = models.ForeignKey(User) 
    ... 

    def __unicode__(self): 
     return self.name 

class ItemForm(ModelForm): 
    class Meta: 
     model = Item 
     fields = ['name', 'description', 'price', 'shipping', 'photo', 'section'] 

    def __init__(self, *args, **kwargs): 
     self._user = kwargs.pop('user') 
     super(ItemForm, self).__init__(*args, **kwargs) 

從模板:

<form enctype="multipart/form-data" action="" method="post" data-ajax="false">{% csrf_token %} 
      {% for field in form %} 
       <div class="fieldWrapper" data-role="fieldcontain"> 
        {{ field.errors }} 
        {{ field.label_tag }} {{ field }} 
       </div> 
      {% endfor %} 

     <input type="submit" value="Save"> 
    </form> 

在我看來,模板是正確的。 Item模型看起來很好,StdImageField是ImageField的包裝。它在管理面板中正常工作。 表格看起來不錯,沒什麼特別的。 在我的views.py罰款,我檢查一個POST請求,調用ItemForm並通過request.POST和request.FILES(和forsale這是一個布爾值)。我檢查表格是否有效,如果有的話,我保存它。爲什麼它不工作?該項目保存但在管理面板中沒有與「照片」相關聯的文件。

+0

我會建議調試:)此外它可能有助於查看生成的表單html,查看來'request.FILES'。 StdImageField類是否正確,它是否可以與標準的ImageField一起工作?在其他視圖中調用另一個視圖也是一個糟糕的主意。應該有一個重定向。 – demalexx 2011-12-28 13:34:00

回答

0

檢查加入「images /」的MEDIA_ROOT設置是否爲Django進程的有效和可寫路徑。

而且使用PDB

import pdb; pdb.set_trace() 

可以幫助您找到問題的過程中,(f.i.看看request.FILES,看看是否一切職務期間看起來確定那裏)。