Функция кнопки не работает без ошибок - django

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

когда я нажимаю на кнопку audiotrack, в терминале отображается только

[12/May/2022 22:11:00] "POST / HTTP/1.1" 200 8928

console

фронтенд моего сайта

пожалуйста, помогите мне исправить это. я дам свой код :

views.py:

from django.shortcuts import render, redirect
from django.views.decorators.csrf import ensure_csrf_cookie
from .forms import AudioForm
from .models import Audio_store
from MusicLockApp.forms import AudioForm

@ensure_csrf_cookie
def homepage(request):
    # return HttpResponse('homepage')
    return render(request, 'homepage.html')

def decode(request):
    # return HttpResponse('about')
    return render(request, 'decode.html')

def upload(request):
    if request.method == "POST":
        form = AudioForm(request.POST, request.FILES)
        if form.is_valid():
            form.save()
        return redirect("main:upload")
    form = AudioForm()
    audio = Audio_store.objects.all()
    return render(request=request, template_name="homepage.html", context={'form':form, 'audio':audio})

urls.py :

from django.contrib import admin
from django.conf.urls import url
from . import views
from django.contrib.staticfiles.urls import staticfiles_urlpatterns
from django.urls import path, re_path
from django.conf import settings


urlpatterns = [
    url(r'^admin/', admin.site.urls),
    url(r'^decode/$', views.decode),
    url(r'^$', views.homepage),
    path('audio', views.Audio_store),
]

urlpatterns += staticfiles_urlpatterns()

models.py:

from django.db import models

class Audio_store(models.Model):
    record=models.FileField(upload_to='media/mp3')

forms.py:

from django import forms 
from .models import Audio_store

class AudioForm(forms.ModelForm):
    class Meta:
        model = Audio_store
        fields=['record']

добавить settings.py:

INSTALLED_APPS = [
    'MusicLockApp',
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'crispy_forms',
]

MIDDLEWARE = [
    'django.middleware.security.SecurityMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.common.CommonMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
]

STATIC_URL = '/static/'

STATICFILES_DIRS = (
    os.path.join(BASE_DIR, 'assets'),
)

MEDIA_URL = '/media/'

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

что я хочу = когда я нажимаю кнопку вставить аудио файл, мы можем выбрать файл из локальной папки и когда нажимаю кнопку скрыть его, он будет загружать его в локальную папку.

Это потому, что у вас есть два разных представления, отображаемые в один и тот же шаблон homepage. Метод POST никогда не будет отправлен в вашу БД. У вас есть два варианта:

1. Если вам нужны разные представления, добавьте его в urlpatterns, в вашей форме поставьте action="{% url 'upload_url' %}"

views.py

@ensure_csrf_cookie
def homepage(request):
    form = AudioForm()
    audio = Audio_store.objects.all()
    context = {'form': form, 'audio': audio}

    return render(request, 'homepage.html', context=context)

def decode(request):
    # return HttpResponse('about')
    return render(request, 'decode.html')

def upload(request):
    if request.method == "POST":
        form = AudioForm(request.POST, request.FILES)
        if form.is_valid():
            form.save()
        return HttpResponseRedirect(request.META.get('HTTP_REFERER'))  # redirect previous page
    return redirect("main:homepage")

urls.py

urlpatterns = [
    url(r'^admin/', admin.site.urls),
    url(r'^decode/$', views.decode),
    url(r'^$', views.homepage),
    url(r'^upload/$', views.upload), # here
    path('audio', views.Audio_store),
]

html

<form method="POST" action="{% url 'main:upload' %}" enctype="multipart/form-data">

2. Самый простой способ - вывести форму на той же странице, что и запрос POST.

views.py

def homepage(request):
    form = AudioForm()
    audio = Audio_store.objects.all()
    if request.method == "POST":
        form = AudioForm(request.POST, request.FILES)
        if form.is_valid():
            form.save()
        return redirect("main:homepage")

    context={'form':form, 'audio':audio}
    return render(request, "homepage.html", context=context)

def decode(request):
    # return HttpResponse('about')
    return render(request, 'decode.html')

Таким образом, вам не придется добавлять еще одну urlpattern и изменять вашу форму action.

Вернуться на верх