Django 如何在表单提交之前获取django表单的值并将其显示给用户
问题描述
我进行了一些研究…并找到了一种建议,在表单上创建一个函数来获取字段的值… 获取表单值
我尝试了这个方法,但出于某种原因,我无法让它工作。我已经在提交过程中使用了表单的clean函数,而且效果非常好。这里的区别在于,我实际上是在表单被提交之前尝试检查字段值。我希望用户点击按钮后能看到这种情况下填充在”approvers”字段中的值。我已经让按钮工作了…但似乎无法让”approvers”的值填充。它只显示[]。
我在我的表单上定义了这个函数…
def get_invitee_name(self):
invitees = self.cleaned_data.get('approvers')
return invitees
但是当我尝试在我的模板中调用这个函数时
{{ invitees }}
…没有显示任何内容。我需要将这个定义为上下文变量吗?
我是否需要使用JavaScript来完成这个操作,或者有没有一种纯Django/Python的方法来完成这个操作?
如果有关系,我正在使用一个模型表格。
解决方案
您定义的表单方法仅使其返回的值在表单本身中可用,而不是在模板中可用。如果您想在实际提交数据之前获取提交的数据的值,并且不想使用JavaScript,您可以简单地使 Check values
按钮向另一个视图发出POST请求,该视图然后将您需要的值作为一 HttpResponse
返回,并重新渲染表单。
视图
我使用 类视图
只是因为我喜欢它们。
from django.views.generic import View
class GetValuesView(View):
def post(self, request, *args, **kwargs):
form = YourForm(request.POST) # The form needs to be rendered with all the data that was entered.
approvers = request.POST.get("approvers") # or whatever value you gave to its name attribute
return render(request, "path-to-template-rendering-your-form", {"form": form, "approvers": approvers})
urls
urlpatterns = [
...
path("get-values/", GetValueView.as_view(), name="get-values")
]
html
然后在表单内部,
<form method="post">
...
<button type="submit" formaction="{ url 'get-values' }" value="Get values"/>
</form>
虽然这样做可以实现,但我认为直接使用JavaScript更简单。