簡體   English   中英

Django文件未上傳

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM