我试图发布图像时MultiValueDictKeyError

时间:2018-01-19 18:25:25

标签: python django python-3.x django-models

当我尝试从管理面板添加图片时,一切正常,但当我尝试从网站添加图片时,出现此错误:image of error。当我试图发布没有图像的细节时,我遇到了同样的问题。在此之前没有。

views.py:

{% extends 'base.html' %}
{% block content %}
<div class="content container">
    <div class="row">
        <div class="col-md-8">
            <div class=".signin">
            <form action="" method="POST">
                {% csrf_token %}
                <h3>Автомобіль: </h3>
                <select name="car">
                    <option selected>Audi A8 D2 3.3 TDI</option>
                    <option>Audi A8 D2 3.7</option>
                    ...
                    ...
                    ...  
                <h3>Ціна: </h3><textarea name="price"></textarea>
                <h3>Фотки: </h3><input type="image" name="images" />
                <p>
                <input type="submit" value="Опублікувати" />
            </form>
        </div>
    </div>
</div>

new_detail.html:

from django.db import models


class Detail(models.Model):
    author = models.ForeignKey(
    'auth.User',
    on_delete=models.CASCADE,)
    car = models.CharField(max_length=100)
    detail = models.TextField()
    description = models.TextField()
    price = models.CharField(max_length=30)
    images = models.ImageField(upload_to='details', null = True, blank = True)

    def __unicode__(self):
        return self.detail

    def __str__(self):
        return self.detail

models.py:

function R=RK4_h(f,a,b,ya,h)

%  Input
%   - f field of the edo y'=f(t,y). A string of characters 'f'
%   - a and b initial and final time
%   - ya initial value y0
%   - h lenght of the step

%  Output
%   - R=[T' Y'] where T independent variable and Y dependent variable


N = fix((b-a) / h);
T = zeros(1,N+1);
Y = zeros(1,N+1);

%   Vector of the time values 
T = a:h:b;

%   Solving ordinary differential equation
Y(1) = ya;
for j = 1:N
    k1 = h*feval(f,T(j),Y(j));
    k2 = h*feval(f,T(j)+h/2,Y(j)+k1/2);
    k3 = h*feval(f,T(j)+h/2,Y(j)+k2/2);
    k4 = h*feval(f,T(j)+h,Y(j)+k3);
    Y(j+1) = Y(j) + (k1+2*k2+2*k3+k4)/6;
end
R=[T' Y'];

1 个答案:

答案 0 :(得分:0)

第一个问题是您在模板中的表单标记中缺少{ Series: 'Inspiron', Model: 'A562103SIN9', Utility: 'Everyday Use', OS: 'Windows 10 Home (64-bit)', Dimensions: '274.73 x 384.9 x 25.44 mm', Weight: '2.62 Kg', Warranty: '1 Year Onsite Warranty' }。有关详细信息,请参阅the docs on file uploads

enctype="multipart/form-data"

其次,当表单中缺少数据时,您的视图不会处理该情况。您应该检查<form action="" method="POST" enctype="multipart/form-data"> 或使用request.POST['detail']

,而不是if 'detail' in request.POST

然而,单独检查每个字段将非常耗时。你应该看看Django formsmodel forms,它可以为你处理很多这个问题。

request.POST.get('detail')

然后你的观点就像是

from django import forms

class DetailForm(forms.ModelForm):
    class Meta:
        model = Detail
        fields = ['car', 'author', 'detail', 'price', 'description', 'images']

您也可以使用表单来简化模板:

from django.contrib.auth.decorators import user_passes_test

@user_passes_test(lambda u: u.is_superuser)
def new_detail(request):
    if request.method == 'POST':
        form = DetailForm(request.POST)
        if form.is_valid():
            detail = form.save()
            return redirect('/new_detail/')
    else:
        form = DetailForm(request.POST)
    return render(request, 'shop/new_detail.html', {'form': form})

如果您需要在模板中获得更多控制权,请参阅rendering fields manually上的文档。