Теперь Кью работает в режиме чтения

Мы сохранили весь контент, но добавить что-то новое уже нельзя

Я хочу, что бы пользователь мог прикрепить к статье файл, что бы загруженный файл сохранился в папке files ,находящейся в media?

Саму 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']

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

<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>

ПрограммированиеPython+1
Иван Козлов
  ·   · 117