猿问

Django:在 URL 中发送表单输入

我是 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,那么我成功呈现详细信息页面


茅侃侃
浏览 102回答 1
1回答

MMMHUHU

您应该发出请求,而不是发出 POST 请求GET,因为此请求不会修改数据库中的任何内容。现在,您可以像这样进行实现:&nbsp;<form action="{% url 'students:detail' %}" method="GET">&nbsp; &nbsp; <div class="form-group">&nbsp; &nbsp; &nbsp; <label for="enrollmentid">Enrollment ID: </label>&nbsp; &nbsp; &nbsp; <input type="text" class="form-control" name="enrollmentid" placeholder="Enter enrollment id">&nbsp; &nbsp; </div>&nbsp; &nbsp; <div class="form-group">&nbsp; &nbsp; &nbsp; <label for="dob">Date of Birth: </label>&nbsp; &nbsp; &nbsp; <input type="text" class="form-control" name="dob" placeholder="Enter dob (YYYY-MM-DD)">&nbsp; &nbsp; </div>&nbsp; &nbsp; <button class="btn btn-primary">Edit Details</button>&nbsp; </form>然后你可以像这样更新你的视图:def detail(request):&nbsp; &nbsp; try:&nbsp; &nbsp; &nbsp; &nbsp;student = Student.objects.get(pk=request.GET.get('enrollmentid'), dob=request.GET.get('dob'))&nbsp; &nbsp; except Student.DoesNotExist:&nbsp; &nbsp; &nbsp; raise Http404("Student do not exist")&nbsp; &nbsp; return render(request, 'students/detail.html', {'student': student})然后在提交表单时,它将重定向到这样的 url:http://localhost:8000/students/detail/?enrollmentid=123&dob=2020-01-01
随时随地看视频慕课网APP

相关分类

Python
我要回答