[英]Django File not uploading
我正在開發一個應用程序,它將允許用戶構建自己的數據庫,他們可以創建的字段之一是照片字段。 我使用的是表單模型,盡管它捕獲了其余數據,但不會嘗試獲取文件。
我可以在網站上的其他地方進行文件上傳,如果我在管理面板中手動上傳文件,則顯示的很好,但是表單本身無法抓取文件。
在我的模板中,我有:
<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)])
但是,這是相同的問題,它將很好地創建字段,但不會嘗試獲取文件。 我不確定為什么它只會在這里失敗,因為這在網站上的其他地方都有效。
不好,我發現了問題所在。
在我看來,我曾在哪里:
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))為空,因為它是FILES而不是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變為空,它將檢查是否附加了文件以及正確的字段類型,如果沒有,則僅創建一個空字段。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.