Django不保存表单中的图像

时间:2014-01-13 11:02:30

标签: python django django-forms image-uploading

我尝试使用数据上传来执行仪表板。上传时我没有收到任何错误,新产品已保存,但没有图像。 下面是代码。 如何解决?

模型:

class Product(models.Model):
    name = models.CharField(max_length=100)
    slug = models.SlugField(unique=True)
    rating = RatingField(range=5) # 5 possible rating values, 1-5
    photo = models.ImageField(verbose_name=u'Photo', upload_to="product_pic", blank=True)

形式:

    class Addproduct(forms.ModelForm):
        class Meta:
            model = Product

html的

    <form action="/addproduct/" method="post">{% csrf_token %}
        {{ form.non_field_errors }}
        <div class="inputBloc">
            <p>
                {{form.name.errors}}
                <label class="txtField" for="id_subject">Product name:</label>
                {{ form.name }}
            </p>
            <p>
                {{form.slug.errors}}
                <label class="txtField" for="id_subject">Slug:</label>
                {{ form.slug }}
            </p>
            <p>
                {{form.photo.errors}}
                <label class="txtField" for="id_subject">Product photo:</label>
                {{ form.photo }}
            </p>
</form>

设定:

MEDIA_ROOT = os.path.join(PROJECT_ROOT, 'media')

views.py

def ProductsAll(request):
    products = Product.objects.all().order_by('name')
    context = {'products': products}
    return render_to_response('productsall.html', context, context_instance = RequestContext(request))

def SpecificProduct(request, productslug):
    product = Product.objects.get(slug = productslug)
    context = {'product': product}
    return render_to_response('specificproduct.html', context, context_instance = RequestContext(request))

2 个答案:

答案 0 :(得分:2)

您需要将enctype="multipart/form-data"添加到html模板中的表单定义。

答案 1 :(得分:1)

  1. 阅读https://docs.djangoproject.com/en/1.6/topics/http/file-uploads/
  2. 检查您是否在method="POST"代码中使用form
  3. 检查您是否在enctype="multipart/form-data"代码中使用form
  4. 检查django是否有权写入upload_to目录(使用admin上传文件)。
  5. 检查通过上传文件对象初始化的表单类,而不是仅发布数据:MyForm(request.POST, request.FILES)