簡體   English   中英

無法在 Django 中使用 HTML 表單更新數據庫

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM