Django UpdateView不上传ImageField

时间:2015-12-09 18:30:23

标签: python django django-models django-views django-generic-views

我没有收到任何错误。 好的谁看到了这个错误?因为我没有。这是我的代码:

Views.py:

class UpdateFeaturete(generic.UpdateView):
    template_name = 'images/updatefeaturete.html'
    model = FeatureteImage
    fields = ['header', 'body', 'image']

    def get_object(self):
        return get_object_or_404(FeatureteImage, pk=self.kwargs['f_pk'])

    def form_valid(self, form):
        return super(UpdateFeaturete, self).form_valid(form)

models.py:

class FeatureteImage(models.Model):
    park = models.ForeignKey(Park)
    header = models.CharField(max_length=50, blank=True)
    body = models.TextField(max_length=250, blank=True)
    image = models.ImageField(upload_to='featureteimages')

def save(self, *args, **kwargs):
    park = Park.objects.get(id=self.venue.id)
    if park.featurete >= 3:
        pass
    else:
        park.featurete += 1
        park.save()
        super(FeatureteImage, self).save(*args, **kwargs) 


def get_absolute_url(self):
    return reverse('park-features', kwargs={'pk': self.park.pk,})

我的模板:

<form method="post" action="" enctype="multipart/form-data">
        {% csrf_token %}
        <div class="form-group">
            {{ form|crispy }}
        </div>
        <input type="submit" value="Save Changes." class="btn btn-primary" />
</form>

一切似乎都运转正常。除了ImageField之外,所有字段似乎都会更新。 提前谢谢!

2 个答案:

答案 0 :(得分:2)

好的,所以你需要的不是保存方法,你需要覆盖清理方法:

def clean(self):
    park = Park.objects.get(id=self.venue.id)
    if park.featurete >= 3:
        raise ValidationError('error message goes here')

答案 1 :(得分:2)

代码中的函数get_absolute_url()存在重复错误。我刚刚测试了你的代码,它工作得很好甚至图像上传。请在其他部分找到原因。

您可以编辑帖子并添加settings.py的代码。