[英]Can't update DB using HTML form in Django
我需要填寫字段名稱和圖像以上傳到 Django DB 但我無法使用 HTML 的表單標簽更新它
視圖.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>")
模型.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__()
表格.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 錯誤,或者被重定向到藝術家姓名字段保留的同一頁面,但我上傳的圖像與消息一起消失了:
看圖
您還需要向表單提供request.FILES
。 這是有關 forms 的更多信息的文檔。
form = ArtistForm(request.POST, request.FILES)
我是這樣解決的,你的方法有問題
create_user
你需要這樣做
Artist.objects.create(
name=form.cleaned_data["name"],
image=form.cleaned_data["image"],
)
並添加
ArtistForm(request.POST, request.FILES)
我希望我有所幫助
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.