我试图更新现有对象'使用Ajax的FileField。在浏览器中创建了一个wav blob,我试图通过将它附加到FormData实例来传递它:
var data = new FormData();
data.append('sound', blob);
$.ajax({
url: "{% url 'posts:update_audio' instance.pk %}",
type: 'POST',
data: data,
cache: false,
processData: false,
contentType: false,
success: function(data) {
alert('success');
}
});
return false;
}
我将pk通过url传递到视图,因为(如果我错了,请纠正我),但我认为这是指定要更新的正确objectt的路径的方法。以下是观点:
def update_audio(request,pk):
form = UpdateAudio(request.POST or None, request.POST or None)
if request.method == 'POST':
if form.is_valid():
instance = form.save(commit=False)
instance.save()
return HttpResponseRedirect('/')
我刚刚对待提交表单的任何其他视图。我对如何更新特定对象感到有点困惑,这引出了我的问题:我应该使用特殊视图,比如UpdateView吗?如果是这样,我该如何实施呢?如果没有,任何人都知道我哪里出错了?我尝试提交表单时,目前只是收到内部服务器错误500。
答案 0 :(得分:2)
将您的表单更改为此
instance = get_object_or_404(MyModel, id=pk)
form = MyUpdateAudioForm(request.POST or None,request.FILES, instance=instance)
和ajax网址
url: "{% url 'posts:update_audio' pk=instance.pk %}",