MultiValueDictKeyError в / product / create / 'icon' - PullRequest
0 голосов
/ 01 апреля 2019

когда я загружаю значок и изображение, появляется ошибка

MultiValueDictKeyError at /product/create/
'icon'
Request Method: POST
Request URL:    http://127.0.0.1:8000/product/create/
Django Version: 2.2a1
Exception Type: MultiValueDictKeyError
Exception Value:    
'icon'
Exception Location: C:\Users\Rohit\Anaconda3\lib\site-packages\django-2.2a1-py3.7.egg\django\utils\datastructures.py in __getitem__, line 80
Python Executable:  C:\Users\Rohit\Anaconda3\python.exe
Python Version: 3.7.0

def create(request):
    if request.method == 'POST':
        if request.POST['title'] and request.POST['body'] and request.POST['url'] and request.POST['icon'] and request.POST['image']:
            product=Product()
            product.title=request.POST['title']
            product.body=request.POST['body']
            if request.POST['url'].startswith('https//') or request.POST['url'].startswith('http//'):
                product.url=request.POST['url']
            else:
                product.url= 'https//'+ request.POST['url']

            product.image = request.FILES['image']
            product.icon = request.FILES['icon']
            product.pub_date=timezone.datetime.now()
            product.hunter = request.user
            product.save()
            return redirect('home')


        else:
            return render(request, 'products/create.html',{'error': 'please fill all the detail'})

Ответы [ 3 ]

0 голосов
/ 24 апреля 2019

вам нужно изменить эту строку:

if request.POST['title'] and request.POST['body'] and request.POST['url'] and request.POST['icon'] and request.POST['image']:

на

if request.POST['title'] and request.POST['body'] and request.POST['url'] and request.FILES['icon'] and request.FILES['image']:

в другом запросе на изменение слова. POST s для изображения и поля значка для запроса. ФАЙЛЫ

request.FILES['icon'] and request.FILES['image']
0 голосов
/ 24 апреля 2019

Я также сталкивался с этим в моем файле create.html, я неправильно его назвал

Вы должны убедиться, что вы делаете это правильно, как это:

, что означает данные формы вместо данных формы

0 голосов
/ 02 апреля 2019

Проблема заключается в следующей строке: product.icon = request.FILES ['icon']

Когда вы отправляете запрос в своем приложении, в request.FILES не отображается значок.Итак, 2 потенциальных проблемы.Во-первых, вы не отправляете значок в requestT.FILES в своем файле внешнего интерфейса.Или вторая проблема заключается в том, что иногда иконка пуста, и вы не обрабатываете этот случай.

Если иконка иногда пуста, вы должны использовать вместо этого:

is_icon = request.POST.get('is_icon ', False)

у вас много документации пополучить функцию.Вот часть руководства:

Метод get () возвращает значение для указанного ключа, если ключ находится в> словаре.

get () Параметры Метод get () принимаетмаксимум два параметра:

ключ - ключ для поиска в словарном значении (необязательно) - значение, которое будет возвращено, если ключ не найден.Значением по умолчанию является None.

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