Форум сайта python.su
Я хочу, что бы пользователь мог прикрепить к статье файл, что бы загруженный файл сохранился в папке 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]
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'), ]
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,)))
from django import forms from .models import * class FileForm(forms.ModelForm): class Meta: model=Files fields=('namesfile','sfile')
[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]
Офлайн
https://docs.djangoproject.com/en/3.1/topics/http/file-uploads/
Ошибка в инициализации формы, забыли про массив с файлами
form = FileForm(request.POST, request.FILES)
Офлайн
VadimK спасибо от души я столько времени не мог это решить эту проблему.
Офлайн