我希望用户能够上传多张图片,但是我只能让它做一张。这是我的代码:
urls.py
from . import views
from django.urls import path
app_name = 'accounts'
urlpatterns = [
path('login/', views.login, name='login'),
path('logout/', views.logout, name='logout'),
path('profile/<int:user_id>', views.profile, name='profile'),
path('profile/<int:user_id>/upload/', views.upload_pics, name='upload_pics'),
]
这是我的看法:
def upload_pics(request, user_id):
user_profile = get_object_or_404(User, pk=user_id)
if request.method == "POST":
file_list = request.FILES.getlist('files')
for afile in file_list:
pic = File()
pic.user = user_profile
pic.image = afile
pic.save()
return redirect("groups:index")
else:
render(request, 'accounts/pic_upload.html')
return render(request, 'accounts/pic_upload.html')
最后,是以下形式(pic_upload.html):
<form action="{% url 'accounts:upload_pics' user.id %}" method="post" enctype="multipart/form-data">
{% csrf_token %}
<table>
<tr>
<td>Select Pictures: </td><td><input name="files" type="file" size="50" accept="image/*" multiple> </td>
<td><button type="submit"> Upload </button> </td>
</tr>
</table>
</form>
这是我的模型:
from django.db import models
from django.contrib.auth.models import User
# Create your models here.
class File(models.Model):
image = models.FileField(upload_to='images/')
user = models.ForeignKey(User, on_delete=models.CASCADE, related_name='files')
我已经尝试了好几天,但是没有运气。我已经研究过表单集,但是似乎存在用于完成多个文件上传的更简单方法。对于为什么只保存一张照片的任何指导,我们将不胜感激。谢谢你
def upload_pics(request, user_id):
user_profile = get_object_or_404(User, pk=user_id)
if request.method == "POST":
file_list = request.FILES.getlist('files')
for afile in file_list:
pic = File()
pic.user = user_profile
pic.image = afile
pic.save()
return redirect("groups:index")
else:
render(request, 'accounts/pic_upload.html')
return render(request, 'accounts/pic_upload.html')
至
def upload_pics(request, user_id):
user_profile = get_object_or_404(User, pk=user_id)
if request.method == "POST":
file_list = request.FILES.getlist('files')
for afile in file_list:
pic = File()
pic.user = user_profile
pic.image = afile
pic.save()
return redirect("groups:index")
else:
render(request, 'accounts/pic_upload.html')
return render(request, 'accounts/pic_upload.html')
return redirect("groups:index")
不应for
阻塞,每次结束后都应返回,这就是为什么只保存一个文件的原因。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句