0

我已经排除了 ModelForm 中的一个字段,但它似乎不会影响表单的 display .as_p。当我什么都没有实例化时,它甚至会显示它!

这是模型表单:

class WorkoutForm(ModelForm):
    class Meta:
        model = Workout
        exclude = ('user',) 

和相关的视图:

def addworkout(request, uid):    
    thisuser = get_object_or_404(User, pk=uid)
    if request.method == 'POST':
        form = WorkoutForm(request.POST)
        if form.is_valid():
            form.save() 
            return HttpResponseRedirect('/u/'+str(uid))
    else:
        w = Workout(user=thisuser)

        #creates a form for thisuser
        form = WorkoutForm(instance = w)
    return render_to_response('addworkout.html', {'form':form, 'user':thisuser},   RequestContext(request))

还有模板:

<body>
    <p>"{{request.path}}" </p>
    Add a new workout, {{user.name}}! 
    <form action="/u/1/addworkout" method="POST">{% csrf_token %} 
    {{ form.as_p }} 

    <input type="submit" value= "Submit" />
    </form>
</body>
4

1 回答 1

1

这是什么?

else:
    w = Workout(user=thisuser)

不应该是这样的:

w = Workout.objects.get(user=thisuser)

如果是这样,它是否修复了错误?

在您的POST请求块中,您还需要传入实例,以便form = WorkoutForm(request.POST, instance=w)

重新编写,您的视图应如下所示:

def addworkout(request, uid):
    thisuser = get_object_or_404(User, pk=uid)
    w = get_object_or_404(Workout, user=thisuser)
    form = WorkoutForm(instance = w)

    if request.method == 'POST':
        form = WorkoutForm(request.POST, instance=w)
        if form.is_valid():
            form.save() 
            return HttpResponseRedirect('/u/'+str(uid))

    return render_to_response('addworkout.html', {'form':form, 'user':thisuser},   RequestContext(request))
于 2012-05-05T07:05:08.613 回答