使用django表单保存之前删除对象字段

时间:2011-05-23 15:23:09

标签: django django-models django-forms django-views

以下代码使用表单来保存新的用户头像图片,但是我无法通过删除旧的头像并使用新的更新来更新。我尝试了很多不同的代码变体。

有人能指出我正确的方向吗?解释为什么会发生这种情况和简短的例子会非常有帮助。非常感谢所有帮助。

模型

class Profile(models.Model):
user = models.ForeignKey('auth.User')
avatar = Image..................

视图

@login_required
def profile(request, pk):
    profile = Profile.objects.get(user=pk)
    pf = ProfileForm(request.POST, request.FILES, instance=profile)
    if request.method =="POST":
        if pf.is_valid():
            profile.avatar.delete() #doesn't work
            pf.save()

    return render_to_response('template.html', {
        'profile': profile,
        'pf':pf
    }, context_instance=RequestContext(request))

模板

<form enctype="multipart/form-data" action="" method="POST"> {% csrf_token %}
    {{ pf }}
    <input type="submit" value="Submit" id="submit" />
</form>

1 个答案:

答案 0 :(得分:1)

关系就像objects属性一样。 MyModel.objects.delete()也无效。您需要执行profile.avatar.all().delete()

之类的操作

更新:以上内容适用于多对多关系。可以直接从外键访问delete()

但是,删除外键时,Django会删除关联的数据库行并使外键的pk / id属性无效,但它清除数据对于外键立即。从技术上讲,你可以这样做:

profile.avatar.delete()
profile.avatar.save()

并且,您最终会得到相同的对象,只能使用不同的主键。