django - 存储所选图像(图像)或将新图像上传到 Django 模型
问题描述
我正在使用 Django 3.1.2
在订单页面上,我向用户提供选项,他可以上传新图像或选择可用图像。
根据他的选择上传图片或选择图片值是要存储在Django模型字段中。
如果用户上传图像,则将其存储在模型中,否则,如果用户选择现有图像,则其路径或图像将保存在模型中。
你能举个例子吗?
解决方案
这是Django 文档本身的示例,您可以像这样对其进行修改并使用单个表单来处理这种情况:
from django.http import HttpResponseRedirect
from django.shortcuts import render
from .forms import UploadFileForm
from .models import ModelWithFileField
def upload_file(request):
if request.method == 'POST':
form = UploadFileForm(request.POST, request.FILES)
if form.is_valid():
if form.file:
instance = ModelWithFileField(file_field=request.FILES['file'])#or form.file
instance.save()
return HttpResponseRedirect('/success/url/')
elif form.selected:
instance = ModelWithFileField(file_field=selected_file(form.selected)) #define a function to fetch the selected file by id or name or whatever you use in your template
instance.save()
return HttpResponseRedirect('/success/url/')
else:
form = UploadFileForm()
return render(request, 'upload.html', {'form': form}) #nothing chosen or uploaded
else:
form = UploadFileForm()
return render(request, 'upload.html', {'form': form})
你的表格看起来像这样:
class UploadFileForm(forms.Form):
title = forms.CharField(max_length=50)
file = forms.FileField(required=False)
selected = forms.IntegerField(required=False)
如果需要,您还可以自定义表单验证器。此外,如果您愿意,您可以切换到 DRF 并使用序列化程序而不是我个人觉得更容易的表单。
推荐阅读
- python - 保存时网格图像中的不均匀正方形
- kotlin - 如何以编程方式将当前 ClassLoader 传递给 KotlinToJVMBytecodeCompiler 以进行动态(运行时)编译 kotlin 代码?
- jenkins - Jenkins 在没有 maven 的情况下构建
- azure - 认知服务 - Bing 语法检查 API v7.0
- html - 如何修复溢出-y:滚动不起作用
- python - 基于标签关联图像的最佳方法
- rdf - 如何实施shacl规则
- c++ - 如何在恒定时间内从提升图中获取顶点?
- twitter-bootstrap - 无法在 bootstrap-vue (nuxt) 中覆盖 $navbar-light-color
- python-3.x - 散景:如何通过复选框的交互式绘图更新图例?