Мне нужно заполнить имя поля и изображение для загрузки в БД Django, но я не могу его обновить, используя метку формы HTML
views.py
"""Artist views."""
# Django
from django.shortcuts import render, redirect
from django.views import View
from django.http import HttpResponse
# Models
from music.models import Artist
# Forms
from artist.forms import ArtistForm
class AddArtistView(View):
"""Adding new artist."""
def upload_image(request):
if request.method == 'POST':
form = ImageUploadForm(request.POST, request.FILES)
if form.is_valid():
m = Artist.objects.get(pk=image_id)
m.model_pic = form.cleaned_data['image']
m.save()
return HttpResponse('Image upload success')
return HttpResponseForbidden('Allowed only via POST')
template = "artist/create_artist.html"
def get(self, request):
"""Render add artist form."""
form = ArtistForm()
context = {"form": form}
return render(request, self.template, context)
def post(self, request):
"""Receive and validate add artist form."""
form = ArtistForm(request.POST)
if not form.is_valid():
context = {"form": form}
print(form.errors)
return render(request, self.template, context)
new_artist = Artist.objects.create_artist(
name=form.cleaned_data["name"],
)
return HttpResponse("<h1>Artist Added!</h1>")
models.py
"""Music Models"""
from django.db import models
class Artist(models.Model):
"""Artist Model."""
name = models.CharField(max_length=200)
image = models.ImageField(null=True, upload_to='artists/images/')
def __str__(self):
"""Get str representation."""
return self.name
def __repr__(self):
"""Get str representation."""
return self.__str__()
forms.py
"""Artist forms."""
# Django
from django import forms
#from django.contrib.auth.models import Artist
from music.models import Artist
class ArtistForm(forms.Form):
"""Add new artist"""
name = forms.CharField(max_length=200)
image = forms.ImageField()
def clean_name(self):
"""Validate that the artist name doesn't exist in the database."""
data = self.cleaned_data["name"]
if Artist.objects.filter(name=data).count() > 0:
raise forms.ValidationError("This artist already exists.")
return data
И, наконец, HTML
{% extends 'music/base.html' %}
{% block title %}Add Artist{% endblock title %}
{% block body_content %}
<h1>Add New Artist</h1>
<form action= "{% url upload_image %}" method="POST" enctype="multipart/form-data">
{% csrf_token %}
{% for field in form %}
<div>
{{ field.errors }}
{{ field.label_tag }}
{{ field }}
</div>
{% endfor %}
<input value="Add" type="submit">
</form>
{% endblock body_content %}
Несколько раз я получал ошибку 405 и 404 или перенаправление на одну и ту же страницу, поле имени исполнителя остается, но загруженное мной изображение исчезает с сообщением:
См. изображение