簡體   English   中英

在Django中保存文件不起作用

[英]Saving file in Django doesn't work

我創建了一個form ,該form應獲取text,modelchoice and file 一切正常,而不是file保存。 它不返回任何error但不保存任何文件。

這是我的表格:

class PurchaseForm(forms.Form):
    text = forms.CharField(required=False, widget=forms.Textarea(attrs={'rows': 18, 'cols': 90}))
    language = forms.ModelChoiceField(queryset=Language.objects.all())
    file = forms.FileField(required=False)

這是一個稱為作業的模型:

class Job(models.Model):
    customer = models.ForeignKey(User,null=False,related_name='customer')
    freelancer = models.ForeignKey(User,null=True,related_name='freelancer')
    description = models.TextField(null=True)
    price = models.FloatField(null=True)
    language = models.ForeignKey(Language,null=False)
    file = models.FileField(upload_to='files')

這是視圖:

def purchase(request):
    if request.method == 'POST':
        print dict(request.POST.iterlists())
        form = forms.PurchaseForm(request.POST)
        if form.is_valid():
            job = Job()
            print form.cleaned_data
            job.customer = request.user
            job.language = form.cleaned_data['language']
            # job.description = form.cleaned_data['description']
            if 'file' in form.cleaned_data.keys():
                print 'OKOK'
                job.file = form.cleaned_data['file']
                # print job.file.path # If I uncomment this, it raises error Exception Value:   The 'file' attribute has no file associated with it.
            job.save()

            return render(request, 'purchases/complete.html')
    else:
        purchase_form = forms.PurchaseForm()
        return render(request, 'jobs/purchase.html', {'purchase_form': purchase_form})

在此view ,有兩個prints 第一個打印此文件(我可以在此處看到文件):

{u'text': [u'\u010dr\u010dr\u010dr\u010d'], u'csrfmiddlewaretoken': [u'os8p9oRWR
d8mMTmSsGPd55Y7bWy6pMWl'], u'language': [u'3'], u'file': [u'export.csv']}

第二個顯示:

{'text': u'\u010dr\u010dr\u010dr\u010d', 'file': None, 'language': <Language: HG
: Hungar - Intermediate - 0.02 eur/sign>}

就像我沒有通過form上傳(發送)任何文件一樣。

您知道為什么會這樣嗎?

編輯:如果我不注釋print job.file.path行,它將引發此錯誤:異常值:

The 'file' attribute has no file associated with it.

我認為您需要這樣的更新表格:

def purchase(request):
    if request.method == 'POST':
        print dict(request.POST.iterlists())
        form = forms.PurchaseForm(request.POST request.FILES or None)

UPD發表評論:
為了保存,也嘗試在url添加:

from django.conf.urls.static import static
urlpatterns = [...] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

並檢查media設置:

MEDIA_URL = '/media/'
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')

這是給管理員的,為模型添加方法,它使用圖像字段:

def admin_image(self):
    return "<img src='%'/>" % self.your_image_field.url
    admin_image.allow_tags = True

並在admin.py注冊list_display=('admin_image',) admin.py list_display=('admin_image',)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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