gpt4 book ai didi

python - 无法将图像上传到 Django 项目,获取 Form 对象没有属性 'save'

转载 作者:行者123 更新时间:2023-12-04 10:43:11 24 4
gpt4 key购买 nike

我正在尝试通过从模板输入的文件上传图像文件。我已按照所有说明进行操作,但在附加文件并单击提交时出现此错误。

AttributeError: 'PicUpForm' object has no attribute 'save'

因此我的图像没有上传到指定的目录以及记录没有插入我的 sqlitedb

以下是我使用过的所有必要代码:

View .py
def add_image(request):
form = PicUpForm()
if request.method == "POST":
form = PicUpForm(data=request.POST, files=request.FILES)
if form.is_valid():
form.save()
return redirect("")
else:
return render(request, "sample.html", {"form": form})

forms.py
class PicUpForm(forms.Form):
class Meta:
model = PicUpClass
fields = [model.picture]
picture = forms.ImageField(label='File')

模型.py
def upload_to(instance, filename):
now = timezone_now()
base, ext = os.path.splitext(filename)
ext = ext.lower()
return f"C:/Users/Aayush/ev_manage/face_detector/static/img/{now:%Y/%m/%Y%m%d%H%M%S}{ext}"



class PicUpClass(models.Model):
picture = models.ImageField(_("picture"), upload_to=upload_to, blank=True, null=True)

样本.html
{% block content %}
{% load static %}
<form method="post" action="/picup" enctype="multipart/form-data">
{% csrf_token %}
{{ form }}
<button type="submit">submit</button>
</form>
{% endblock %}

urls.py
...
path('picup', views.add_image, name='picup'),

我还根据需要在创建模型后运行了 makemigrations 和 migrate 命令。请帮助我,因为我是 Python 新手,非常重要的是需要完成此功能

最佳答案

您的 PicUpForm不是 ModelForm ,因此它不会占用 Meta完全考虑在内。请注意,这些字段应该是一个字符串列表,因此您应该将表单重写为:

class PicUpForm(forms.ModelForm):
class Meta:
model = PicUpClass
fields = ['picture']

请注意,在您看来,对于 redirect(..)您需要传递 View 的名称,因此:
def add_image(request):
if request.method == 'POST':
form = PicUpForm(data=request.POST, files=request.FILES)
if form.is_valid():
form.save()
return redirect('name-of-view')
else:
form = PicUpForm()
return render(request, 'sample.html', {'form': form})

这里需要更换 name-of-view与 View 的名称。

如果 View 包含参数,您可以将其作为命名参数传递,例如,如果您的 View 具有 picture_id参数(如果它有另一个参数,那么你当然应该改变参数的名称):
def add_image(request):
if request.method == 'POST':
form = PicUpForm(data=request.POST, files=request.FILES)
if form.is_valid():
picup = form.save()
return redirect('name-of-view', picture_id=picup.pk)
else:
form = PicUpForm()
return render(request, 'sample.html', {'form': form})

关于python - 无法将图像上传到 Django 项目,获取 Form 对象没有属性 'save',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59837348/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com