【问题标题】:Django: Send form inputs in URLDjango:在 URL 中发送表单输入
【发布时间】:2020-04-28 06:11:02
【问题描述】:

我是 Django 新手,正在尝试创建一个网络应用学生管理系统,在该系统中学生由管理员添加,学生可以通过输入他们的注册 ID 来编辑他们的详细信息。

在models.py中我添加了这个模型

class Student(models.Model):
  gender_choices = [('M', 'Male'), ('F', 'Female')]
  enrollment_no = models.CharField(max_length=10, primary_key=True, unique=True)
  first_name = models.CharField(max_length=50)
  last_name = models.CharField(max_length=50)
  father_name = models.CharField(max_length=50)
  mother_name = models.CharField(max_length=50)
  address = models.CharField(max_length=200)
  dob = models.DateField('date of birth')
  gender = models.CharField(choices=gender_choices,max_length=1,default=None)

  def __str__(self):
    return (self.first_name +" "+ self.last_name)

在index.html页面输入学生注册ID的形式是

  <form action="{% url 'students:detail' %}" method="post">
    <div class="form-group">
      <label for="enrollmentid">Enrollment ID: </label>
      <input type="text" class="form-control" id="enrollmentid" placeholder="Enter enrollment id">
    </div>
    <div class="form-group">
      <label for="dob">Date of Birth: </label>
      <input type="email" class="form-control" id="dob" placeholder="Enter dob (YYYY-MM-DD)">
    </div>
    <button class="btn btn-primary">Edit Details</button>
  </form>

现在我想去/students/detail/{enrollment id given by user}路由我如何将输入传递给url

在views.py中我已经定义了

def detail(request, student_id):
  try:
    student = Student.objects.get(pk=student_id)
  except Student.DoesNotExist:
    raise Http404("Student do not exist")
  return render(request, 'students/detail.html', {'student': student})

在 urls.py 我已经定义了

app_name = 'students'
urlpatterns = [
    path('', views.index, name='index'),
    path('detail/<student_id>', views.detail, name='detail')
]

如果我手动输入http://localhost:8000/students/detail/ABC1235,那么我成功渲染了详细页面

【问题讨论】:

    标签: python django


    【解决方案1】:

    您应该发出GET 请求,而不是发出 POST 请求,因为此请求不会修改数据库中的任何内容。现在,您可以像这样进行实现:

     <form action="{% url 'students:detail' %}" method="GET">
        <div class="form-group">
          <label for="enrollmentid">Enrollment ID: </label>
          <input type="text" class="form-control" name="enrollmentid" placeholder="Enter enrollment id">
        </div>
        <div class="form-group">
          <label for="dob">Date of Birth: </label>
          <input type="text" class="form-control" name="dob" placeholder="Enter dob (YYYY-MM-DD)">
        </div>
        <button class="btn btn-primary">Edit Details</button>
      </form>
    

    然后你可以像这样更新你的视图:

    def detail(request):
        try:
           student = Student.objects.get(pk=request.GET.get('enrollmentid'), dob=request.GET.get('dob'))
        except Student.DoesNotExist:
          raise Http404("Student do not exist")
        return render(request, 'students/detail.html', {'student': student})
    

    然后在提交表单时,它将重定向到这样的 url:http://localhost:8000/students/detail/?enrollmentid=123&dob=2020-01-01

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-08-17
      • 2021-09-26
      • 2014-04-14
      • 2013-05-26
      • 2020-07-10
      • 1970-01-01
      • 2015-04-16
      • 1970-01-01
      相关资源
      最近更新 更多