Modelform在视图中成功验证和保存......但事实并非如此

时间:2011-03-29 03:12:55

标签: django django-models django-forms

HI,

对我来说,这是一个意想不到的结果。我在以下视图中执行以下操作....

        (standard view stuff here...)

        if post:
            postform=PostForm(request.POST,instance=post, prefix="post")
            tagform=TagForm(request.POST, instance=post,prefix='tags')  
            ohouse_form=Host_OHouseForm(request.POST,instance=post,prefix="ohouse")
        else:   
            postform=PostForm(request.POST,prefix="post")
            tagform=TagForm(request.POST, prefix='tags')
            ohouse_form=Host_OHouseForm(request.POST,prefix="ohouse")   

                   (....I first validate that postform and tagform are valid...) 
        if ohouse_form.is_valid():
            ohouse=ohouse_form.save(commit=False)
            ohouse.post=post
            ohouse.host=user
            ohouse.save()

有问题的表格是一种模型形式。令我困惑的是,视图正常工作,表单验证并且保存成功。该模型应该保存在那一点......如果表单/模型有任何问题,它将不会验证或引发错误。

然而实例并没有出现在我的管理员后端。它也不存在于ohouse查询集中。

这令我感到困惑

2 个答案:

答案 0 :(得分:1)

我注意到你正在使用前缀。看看我在其他答案中注意到的奇怪行为。

Python - Django - Form choicefield and cleaned_data

编辑:

你的意思是设置你的所有实例=帖子,甚至是你的OHouse表格吗?

答案 1 :(得分:1)

根据您的最新更新:

这是非常有希望的进展。这意味着正在发生数据库写入,因为返回该ID是数据库查询。

你也应该print type(ohouse)。我有一种感觉,你没有保存OHouse对象。

我发现你正在instance=post传递给你ModelForms的每一个,这是不对的。这会使Host_OHouseForm({}, instance=post)返回一个新的Post对象。

我得到了我的赌注,这就是问题。

  if post:
        postform=PostForm(request.POST,instance=post, prefix="post")
        tagform=TagForm(request.POST, instance=post,prefix='tags')  
        ohouse_form=Host_OHouseForm(request.POST,instance=post,prefix="ohouse")