Саму media я настроил. Сейчас, если выбрать файл, указать его имя, то при активации функции leave_file в консоль выводится ошибка <ul class="errorlist"><li>sfile<ul class="errorlist"><li>Обязательное поле.</li>
</ul></li></ul> Потому что форма не валидна. Что не так я сделал?
это 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)
namesfile=models.TextField('Имя Файла')
sfile=models.FileField(upload_to='files/')
это url
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 django.http import HttpResponseRedirect
from .forms import *
from django.urls import reverse,reverse_lazy
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']
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
<h1>{{get_article.name}}</h1>
<p>{{get_article.text}}</p>
{%for item in get_article.files_articles.all%}
<a href="{{MEDIA_URL}}files/{{ item.namesfile}}" download>{{ item.namesfile}}</a>
<br>
{%endfor%}
<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>