【问题标题】:Django UpdateView does not Upload ImageFieldDjango UpdateView 不上传 ImageField
【发布时间】:2016-03-15 04:10:22
【问题描述】:

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

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 之外,所有字段似乎都更新了。 提前谢谢!

【问题讨论】:

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


    【解决方案1】:

    代码中有get_absolute_url()函数重复错误。我刚刚测试了您的代码,即使图像正在上传,它也运行良好。请在其他部分查找原因。

    您能否编辑您的帖子并为settings.py 添加代码。

    【讨论】:

    • 我没有包含我在模型中创建的默认保存功能。那就是问题所在。因为我有 3 个功能并且它只是通过了。关于如何解决这个问题的任何建议?
    【解决方案2】:

    啊,好吧,所以你需要的不是你需要覆盖 clean 方法的 save 方法:

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

    【讨论】:

    • 不。问题出在我的模型中。我已经覆盖了默认的保存功能,因此不允许任何人拥有超过 3 个特征。所以如果我有 3 个并且我想更新一个,它仍然会给我一个错误。 (见我更新的代码)
    • 尝试将 super(FeatureteImage, self).save(*args, **kwargs) 放在 else 块之外,以便始终保存数据
    • 这不起作用,因为即使有 3 个特征,它仍然会保存它
    • 啊,好吧,所以您需要的不是您需要覆盖 clean 方法的 save 方法。 def clean(self): park = Park.objects.get(id=self.venue.id) if park.featurete &gt;= 3: raise ValidationError('error message goes here')
    猜你喜欢
    • 1970-01-01
    • 2015-10-11
    • 1970-01-01
    • 2013-11-06
    • 2016-02-10
    • 2013-01-10
    • 2011-04-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多