如何在Django中清除提交后的表单字段

mkshixfv  于 2022-11-26  发布在  Go
关注(0)|答案(9)|浏览(216)

我有这个:

def profile(request, username):
    if request.method == 'POST':
        if request.user.is_authenticated():
            new_message = Message(author = request.user)
            form = MessagesForm(request.POST, instance = new_message)
        else:
            form = MessagesForm(request.POST)
        if form.is_valid():
            form.save()
    else:
        to_user = User.objects.get(username = username)
        form = MessagesForm(initial = {'user': to_user.pk})

    return render(request, "profile.html", {
        'username': username,
        'form': form,
        'messages': messages,
    })

这个表单提交了一个消息并返回了相同的页面。我的问题是,提交后我再次看到我的字段填写了我的信息。如何在提交后清除它?

rqenqsqc

rqenqsqc1#

在保存表单而不是显示postdict后,分配空表单

form = EmployeeForm()
    if request.method == "POST":
        pDict = request.POST.copy() 
        form = EmployeeForm(pDict) #if not valid shows error with previous post values in corresponding field
        if form.is_valid():
            form.save()
            form = EmployeeForm() # show empty form no need to give HttpResponseRedirect()
of1yzvn4

of1yzvn42#

标准做法是在表单提交后重定向以防止重复。
成功时返回重定向到您的表单即可。

if form.is_valid():
    form.save()
    return http.HttpResponseRedirect('')
atmip9wb

atmip9wb3#

在保存()之后,你可以返回带有MessagesForm(request.GET)值的“form”键。

return render(request, "profile.html", {
        'username': username,
        'form': MessagesForm(request.GET),
        'messages': messages,
    })
5f0d552i

5f0d552i4#

通常,您可以在保存数据后初始化相同的空表单:

if request.method == "POST":
    rf = RegistrationForm(request.POST)
    if rf.is_valid():
        print 'Saving datas..'
        #logic to save datas
        rf = PreRegistrationForm()
        return render_to_response('registration/confirmation_required.html', {'settings': settings}, context_instance=RequestContext(request))
hgc7kmma

hgc7kmma5#

尝试在@Karthikkumar的答案中使用HttpResponseRedirect('/')而不是HttpResponseRedirect(''),特别是如果您的主视图是一个空路径,例如您在urls.py文件中:

urlpatterns = [path('',views.home_view),]

我遇到了类似的问题,就像上面讨论的HttpResponseRedirect('')将我引导到一个空白页面一样。让我知道添加斜杠是否对你有效!

bq3bfh9z

bq3bfh9z6#

您可以使用此选项:

Sometimes you can use this idea take attrs={ "autocomplete":"off"} for each inputs.
dbf7pr2w

dbf7pr2w7#

您可以重定向回初始帖子

post_url = request.build_absolute_uri(post.get_absolute_url())
return HttpResponseRedirect(post_url)

请注意,“post”是所创建模型的示例

uurv41yg

uurv41yg8#

我希望你已经为GET方法定义了一个逻辑。如果你已经定义了,那么你所能做的就是简单地在结尾添加returnrequest. meta['HTTP_REFERR']
明白我的意思:

def profile(request, username):
    if request.method == 'POST':
        if request.user.is_authenticated():
            new_message = Message(author = request.user)
            form = MessagesForm(request.POST, instance = new_message)
        else:
            form = MessagesForm(request.POST)
        if form.is_valid():
            form.save()
    else:
        to_user = User.objects.get(username = username)
        form = MessagesForm(initial = {'user': to_user.pk})
    
    return HttpResponseRedirect(request.META['HTTP_REFERER'])

这应该能用,我刚测试过。

ylamdve6

ylamdve69#

也许我迟到了,但对于Django 4.x开发者可以用途:

from .forms import TodoForm
from django.contrib import messages
from django.http import HttpResponseRedirect

def mytodos(request):
   form = TodoForm()
   if request.method =='POST':
      form=TodoForm(request.POST)
      if form.is_valid:
         form.save()
         messages.success(request,'Task saved successfully')
         return HttpResponseRedirect('/todo/')
   mycontext={'form':form}
   return render(request, 'todo/todo.html',mycontext)

在我的urls.py:中,我已经设置了path('todo/',views.mytodo, name='todolist')正如你所看到的,保存表单后,mycode将重定向到/todo/,它在每次提交后自动刷新,并且每次都会出现一个新的表单。如果你是一个好的django开发人员,你会明白我所做的。如果你有任何疑问,请务必回复。谢谢:)

相关问题