хочу загрузить несколько фотографий для пользователя, разрешив только одну - PullRequest
0 голосов
/ 08 мая 2018

Я хочу, чтобы пользователи могли загружать несколько картинок, но я могу заставить их сделать только одну. вот мой код:

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')

Я пытался сделать это в течение нескольких дней, но не повезло. Я рассмотрел наборы форм, но, кажется, существуют более простые методы для выполнения нескольких загрузок файлов. любые рекомендации относительно того, почему сохраняется только 1 изображение, были бы действительно полезны. спасибо, 1015 *

1 Ответ

0 голосов
/ 08 мая 2018
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, вы должны возвращаться после каждого запуска, поэтому сохраняется только один файл.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...