首页 > 解决方案 > 存储所选图像(图像)或将新图像上传到 Django 模型

问题描述

我正在使用 Django 3.1.2

如果用户上传图像,则将其存储在模型中,否则,如果用户选择现有图像,则其路径或图像将保存在模型中。

你能举个例子吗?

标签: djangodjango-modelsfile-uploaddjango-viewsdjango-forms

解决方案


这是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 并使用序列化程序而不是我个人觉得更容易的表单。


推荐阅读