【问题标题】:store selected image(image) or upload new image to Django model存储所选图像(图像)或将新图像上传到 Django 模型
【发布时间】:2021-05-23 08:12:51
【问题描述】:

我正在使用 Django 3.1.2

  • 在订单页面上,我向用户提供选项,他可以上传新图片或选择可用图片。

  • 根据他的选择上传图片或选择图片的值是存储在Django模型字段中。

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

你能举个例子吗?

【问题讨论】:

  • 到目前为止你做了什么?如果您向我们展示您的尝试,我们只能为您提供帮助...

标签: django django-models file-upload django-views django-forms


【解决方案1】:

这是Django docs 本身的示例,您可以像这样对其进行修改并使用单个表单来处理这种情况:

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)

如果需要,您也可以customize your form validators。 此外,如果您愿意,您可以切换到 DRF 并使用序列化程序而不是我个人觉得更容易的表单。

【讨论】:

  • 如果我在模型中只有图像字段,数据类型为 Imagefield。不是两个不同的字段“选定”和“文件”只有一个字段“temp_img”用于上传的图像或相同的字段用于选定的图像.
  • 您的模型在这里也有一个 ImageField(名为 file_field),但您的 Form 有 2 个不同的字段。然后你可以用用户上传的文件填充你的模型字段,或者通过在上面的代码中定义一个名为 selected_file 的函数或任何你喜欢的函数来从你自己的静态文件中获取选定的文件。取决于您如何在模板或表单中表示图片(url、id 等)
  • 我也将文件存储在模型中 (stackoverflow.com/questions/66226144/…) 你可以在这个问题中看到,但在这里我没有处理它,因为我没有处理它,因为我没有知道怎么做。
猜你喜欢
  • 2017-05-31
  • 1970-01-01
  • 2017-04-27
  • 1970-01-01
  • 2017-09-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多