首页 > 解决方案 > 如何在 Django 中使用 form.cleaned_data.get() 将数据从视图传递到成功模板?

问题描述

我正在构建一个基本的 Covid 考试预约系统。一切正常;我以表格形式从用户那里获取数据并将其保存到数据库中。但我正在尝试向表单成功页面显示其中的一些数据。就像用户在单击提交按钮后以姓名、数据、时间等形式输入他们的详细信息时一样。我希望在成功页面上呈现表单的名称、日期、时间。我什至试过这个,但我得到一个错误,比如:

NoReverseMatch at /covid_test 使用参数 '({'name': 'Popes', 'test_date': datetime.date(2021, 4, 23), 'test_time': datetime.time(18, 0)} ,)' 未找到。尝试了 1 种模式:['success$']

这是错误的屏幕截图:

在此处输入图像描述

以下是我的相同代码:

模型.py

from django.db import models

# Create your models here.
class Covid_Test_Model(models.Model):
    gender_chooice = [
        ('Male', 'Male'),
        ('Female', 'Female')
    ]
    name = models.CharField(max_length=100, null=False)
    age = models.IntegerField(null=False)
    gender = models.CharField(max_length=20, choices=gender_chooice, default='Male', null=False)
    phone = models.CharField(max_length=15, null=False)
    email = models.EmailField(max_length=100, null=False)
    adhaar_no = models.CharField(max_length=16, null=False)
    address = models.TextField(null=False)
    date = models.DateField(null=False)
    Time = models.TimeField(auto_now=False, auto_now_add=False, null=False)

    def __str__(self) -> str:
        return self.name

视图.py

from django.shortcuts import render, redirect

# Create your views here.
from covid_test_app.forms import Covid_Test_Form


def covid_test(request):
    if request.method == 'POST':
        form = Covid_Test_Form(request.POST)
        if form.is_valid():
            form.save()
            name = form.cleaned_data.get("name")
            test_date = form.cleaned_data.get("date")
            test_time = form.cleaned_data.get("Time")
            print(name)
            c = {
                'name': name,
                'test_date': test_date,
                'test_time': test_time
            }
            return redirect('success', c)
    else:
        form = Covid_Test_Form()
        context = {
            'form': form,
        }
    return render(request, 'covid_test.html', context)

表格.py

from django import forms
from django.forms import fields
from .models import Covid_Test_Model

class Covid_Test_Form(forms.ModelForm):
    class Meta:
        model = Covid_Test_Model
        fields = ["name", "age", "gender", "phone", "email", "adhaar_no", "address", "date", "Time"]

        widgets = {
            "name": forms.TextInput(attrs={'class': 'form-control'}),
            "age": forms.TextInput(attrs={'class': 'form-control', 'type': 'number'}),
            "gender": forms.Select(attrs={'class': 'form-control'}),
            "phone": forms.TextInput(attrs={'class': 'form-control', 'type': 'number'}),
            "email": forms.TextInput(attrs={'class': 'form-control'}),
            "adhaar_no": forms.TextInput(attrs={'class': 'form-control'}),
            "address": forms.Textarea(attrs={'class': 'form-control', 'rows': 2}),
            "date": forms.TextInput(attrs={'class': 'form-control'}),
            "Time": forms.TextInput(attrs={'class': 'form-control'}),
        }

Success.html这是我想显示在前一页填写表单的用户数据的地方。

{% extends 'base.html' %}
{% load static %}
{% block extrahead %}
    <link href="{% static 'styles/success.css' %}" rel="stylesheet">
{% endblock %}

{% block content %}

    <div class="container-fluid bg">
  <div class="card-container">
  <div class="bigcard">
    <div class="mx-5 my-5 d-flex flex-column justify-center">
            <h4 class="text-center my-3 display-4 text-info">Success!</h4>
                {# here I am accessing data that I passed as dictionary from my views #}
    <p class="text-center lead">Dear {{ name }} your covid test appointment has been book on {{ test_date }} at {{ test_time }}</p>
      <a type="submit" href="{% url 'home' %}" class="btn btn-info text-white my-4">Back To Home</a>
      </div>
    </div>
  </div>

  </div>

{% endblock %}

标签: pythondjangodjango-viewsdjango-formsdjango-templates

解决方案


推荐阅读