2015-11-14 146 views
0

我正在研究一個應用程序,它可以讓用戶建立自己的數據庫,並且他們可以創建的字段之一是照片字段。我正在使用表單模型,並且在捕獲其餘數據的同時,它不會嘗試抓取文件。Django文件沒有上傳

我有文件上傳在網站上的其他地方工作,如果我在管理面板上手動上傳文件,它顯示得很好,但表單本身不會抓取文件。

在我的模板,我有:

<form action="/orgs/{{org.id}}/db/{{db.unique_id}}/rows/add/" method="post" enctype="multipart/form-data"> 
    {% csrf_token %} 
    ... 
    {% elif column.field_type = 23 %} 
     {{form.photofield}} 
    {% endif %} 
</form> 

在我的模型:

from django.db import models 

def get_upload_file_name(instance, filename): 
    return settings.UPLOAD_FILE_PATTERN % (str(time()).replace('.','_'), filename) 

class DbField(models.Model): 
    ... 
    photofield = models.FileField(upload_to=get_upload_file_name, null=True, blank=True) 

在我的形式:

from django import forms 
from byodb.models import DbField 

class DbFieldForm(forms.ModelForm): 
    class Meta: 
     model = DbField 
     fields = ('photofield',) 
     widgets = {'photofield': forms.FileInput()} 

,並在我的觀點:

def org_database_add_row(request, organization_id=1, db_id=1): 
    if request.POST: 
     if request.POST.get(str(column.unique_id)): 
      if column.field_type == 23: 
       form = DbFieldForm(request.POST, request.FILES) 
       if form.is_valid(): 
        f = form.save(commit=False) 
        ... 
        f.save() 

對列/行的任何混淆感到抱歉,它只是放置該字段的數據。如果你需要更多的細節,那麼我可以添加更多,但在表面上看起來像所有東西都應該工作...

另外,我一直試圖讓它以另一種方式工作,避免使用表格,以便文件字段將被命名爲與我的列相同。

在這種情況下,在我的模板記載:

<input type="field" name="{{column.unique_id}}" id="photofield" /> 

,並在我的看法記載:

elif column.field_type == 23: 
    DbField.objects.create(row=row, column=column, unique_id=column.unique_id, creator=request.user, last_editor=request.user, field_type=column.field_type, photofield=request.FILES[str(column.unique_id)]) 

但是它同樣的問題,它會創建場就好了,但它不會嘗試抓取文件。我不知道爲什麼它只能在這裏失敗,因爲這在網站上的其他地方都適用。

回答

1

我的不好,我想出了問題。

在我的意見,我在那裏:

if request.POST: 
    if request.POST.get(str(column.unique_id)): 
     if column.field_type == 23: 
      DbField.objects.create(row=row ... photofield=request.FILES[str(column.unique_id)]) 

有人失敗,因爲request.POST.get(STR(column.unique_id))是空的,因爲它是文件,而不是POST。

我改寫的觀點,以適應:

if request.POST.get(str(column.unique_id)): 
    ... 
else: 
    if request.FILES[str(column.unique_id)]: 
     if column.field_type == 23: 
      DbField.objects.create(row=row ... photofield=request.FILES[str(column.unique_id)]) 
     else: 
      DbField.objects.create(row=row ... all other fields left blank) 

這樣,如果request.POST的領域出現空白,它會檢查,看看是否有附加的文件和正確的字段類型,如果沒有的話它只是創建空的領域。