Найти - Пользователи
Полная версия: Почему форма FileField не валидна?
Начало » Django » Почему форма FileField не валидна?
1
mister.twister
Я хочу, что бы пользователь мог прикрепить к статье файл, что бы загруженный файл сохранился в папке files ,находящейся в media?Саму media я настроил. Сейчас, если выбрать файл, указать его имя, то при активации функции leave_file в консоль выводится ошибка <ul class=“errorlist”><li>sfile<ul class=“errorlist”><li>Обязательное поле.</li> потому что форма не валидна почему?
это models
[code python]
from django.db import models
class Articles(models.Model):
name=models.CharField("Название статьи",max_length=200)
text=models.TextField(verbose_name="Текст")
class Files(models.Model):
aticleff=models.ForeignKey(Articles,on_delete=models.CASCADE,related_name='files_articles')
namesfile=models.TextField('Имя Файла')
sfile=models.FileField(upload_to='files/')
[/code]
это urls
 from django.contrib import admin
from django.urls import path
from core import views
app_name='core'
urlpatterns = [
	path('detail/<int:id>', views.detail_page, name='detail_page'),
	path('detail/<int:id>/leave_file/',views.leave_file,name='leave_file'),
]
это views
 from django.shortcuts import render,redirect, get_object_or_404
from .models import *
from .forms import *
from django.urls import reverse,reverse_lazy
from django.http import HttpResponseRedirect
def detail_page(request,id):
    get_article = Articles.objects.get(id=id)
    context = {
         'get_article':get_article,
	 'form2':FileForm(request.POST, request.FILES),
     }     
    template = 'detail.html'     
    return render(request,template,context)
def leave_file(request,id,*args,**kwargs):
    form = FileForm(request.POST)
    artic = get_object_or_404(Articles, id=id)
    a=Articles.objects.get(id=id)
    if request.method=='POST':
        if form.is_valid():
            file = Files()
            file.aticleff = artic
            file.namesfile = form.cleaned_data['namesfile']
            file.sfile= form.cleaned_data['sfile']
            file.save()
        else:
            print(form.errors)
    return HttpResponseRedirect(reverse('core:detail_page',args=(a.id,)))
это forms
 from django import forms
from .models import *
class FileForm(forms.ModelForm):
	class Meta:
		model=Files
		fields=('namesfile','sfile')
это detail.html
[code html]
<h1>{{get_article.name}}</h1>
<p>{{get_article.text}}</p>
<form action="{%url 'core:leave_file' get_article.id%}" method="post" enctype="multipart/form-data">
{% csrf_token %}
{{form2.as_p}}
<button type="submit" class="btn btn-primary">Добавить</button>
</form>
[/code]
VadimK
https://docs.djangoproject.com/en/3.1/topics/http/file-uploads/

Ошибка в инициализации формы, забыли про массив с файлами
 form = FileForm(request.POST, request.FILES)
mister.twister
VadimK спасибо от души я столько времени не мог это решить эту проблему.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB