我一直在尝试为图片的多次上传编码,仅我的代码 即使选择了多个图像,也上传了1张图像,我不知道如何进行迭代,选择文件并打印多张图像后,我进行了打印,但是当我保存表单时,它仅保存一张图像。
我基本上试图使用Django中出现的代码 文档。
models.py
class Images(models.Model):
picture = models.ImageField(upload_to='media/photoadmin/pictures')
forms.py
class UploadImages(forms.ModelForm): 类Meta: 型号=图片 栏位=('图片',) widgets = {'picture':forms.ClearableFileInput( attrs = {'multiple':True})}
views.py
class Upload(FormView):
form_class = UploadImages
template_name = 'photoadmin/upload.html'
success_url = 'photoadmin/'
def post(self, request, *args, **kwargs):
form_class = self.get_form_class()
form = self.get_form(form_class)
files = request.FILES.getlist('picture')
if form.is_valid():
form.save()
for f in files:
file_instance = Images(picture=f)
file_instance.save()
return render(request, 'photoadmin/index.html')
else:
return render(request, 'photoadmin/index.html')
html
{% extends 'base.html' %}
{% block content %}
<form method="post" enctype="multipart/form-data">
{% csrf_token %}
{{ form.as_p }}
<button type="submit">Upload</button>
</form>
<p><a href="{% url 'index' %}">Return to home</a></p>
{% endblock %}
此代码写入数据库,但不将文件上传到静态 文件夹
答案 0 :(得分:0)
您可能需要使用FileSystemStorage
from django.core.files.storage import FileSystemStorage
...
class Upload(FormView):
form_class = UploadImages
template_name = 'photoadmin/upload.html'
success_url = 'photoadmin/'
def post(self, request, *args, **kwargs):
form_class = self.get_form_class()
form = self.get_form(form_class)
files = request.FILES.getlist('picture')
if form.is_valid():
fs = FileSystemStorage()
for file in files:
fs.save(file.name, file)
return render(request, 'photoadmin/index.html')
else:
return self.form_invalid(form)
答案 1 :(得分:0)
所以,这终于是解决方案。
views.py
class UploadView(generic.CreateView):
form_class = UploadImages
model = PostSession
template_name = 'photoadmin/upload.html'
success_url = reverse_lazy('upload')
def form_valid(self, form):
object = form.save(commit=False)
form.save()
if self.request.FILES:
for afile in self.request.FILES.getlist('picture'):
img = object.images.create(picture=afile)
return super(UploadView, self).form_valid(form)
您可以迭代
models.py
class PostSession(models.Model):
session_name = models.CharField(max_length=25)
def __str__(self):
return str(self.session_name)
class Images(models.Model):
name = models.ForeignKey(
PostSession, related_name='images', on_delete=models.CASCADE, null=True, blank=True)
picture = models.ImageField(upload_to='pictures')
希望这对社区有所帮助!