Разрешение пользователям загружать изображения профиля, но 1) форма недействительна 2) неправильно сохранено - PullRequest
0 голосов
/ 07 мая 2018

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

from django.db import models
from django.contrib.auth.models import User
# Create your models here.

class File(models.Model):
    files = models.FileField(upload_to='images/')
    user = models.ForeignKey(User, on_delete=models.CASCADE, related_name='files')

далее, форма для загрузки выглядит так:

from django import forms
from .models import File


class FileForm(forms.ModelForm):

    class Meta:
        model=File
        fields=('files',)
        widgets={'files':forms.FileInput(attrs={'id':'files','required':True,'multiple':True})}

наконец, представление «загрузить фото» выглядит следующим образом:

def upload_pics(request, user_id):
    if request.method == "POST":
        form = FileForm(request.POST)
        if form.is_valid():
            pics = form.save(commit=False)
            pics.user = request.user
            pics.files = request.Files['files']
            pics.save()
            return redirect(request, 'accounts:profile', user_id)

    else:
        form = FileForm()
        render(request, 'accounts/account_form.html', {'form':form})
    return render(request, 'accounts/account_form.html', {'form':form})

У меня два вопроса:

  1. форма недействительна, даже если я нажму на несколько картинок
  2. фотографии не сохраняются правильно

1 Ответ

0 голосов
/ 07 мая 2018

Вам необходимо передать файлы в форму.

form = FileForm(request.POST, request.FILES)

Кроме того, вы не показываете свой шаблон, но убедитесь, что вы используете enctype="multipart/form-data".

...