Файл загружается через FormModel (официальное описание), но form.is_valid всегда ложно - PullRequest
0 голосов
/ 20 апреля 2019

Я пытаюсь использовать FormModel для обработки загрузки файла, но form.is_valid () всегда возвращает false и никогда не показывает никаких ошибок. Ниже приведен фрагмент кода из models.py, forms.py, views.py и мой POST-запрос.

models.py

class Pics(models.Model):
    id = models.AutoField(primary_key=True,)
    username = models.CharField(max_length=45)
    path = models.ImageField(upload_to=img_path)

forms.py

class PicsForm(forms.ModelForm):
    class Meta:
        model = Pics
        fields = ['username','path']

views.py

def uploads(request:HttpRequest):
    form = PicsForm(request.POST,request.FILES)
    if form.is_valid():
        # instance = Pics(username=request.POST['username'],path=request.FILES['file'])
        # instance.save()
        form.save()
        print('***')
    else:
        print('&&&&&&&&&&&&&')
    return HttpResponse("succeed")

вот мой набор почтальона

Я ожидаю вывод '***', но фактический вывод '&&&&&&&&&&&&&'

Ответы [ 2 ]

1 голос
/ 20 апреля 2019

Убедитесь, что ваша html-форма имеет 'enctype = "multipart / form-data", а вход для загрузки файла имеет имя "path", например, ваша форма должна выглядеть следующим образом:

<form action="some_url" method="POST" enctype="multipart/form-data">
    <input type='text' name='username'>
    <input type="file" name="path">
</form>
0 голосов
/ 20 апреля 2019

Я подозреваю, что Почтальон не устанавливает токен CSRF.Есть ли причина, по которой вы тестируете Postman, а не создаете HTML-форму и отправляете ее через браузер?Я бы сделал последнее, и если проблема все еще остается, вы можете показать нам свой шаблон.

...