Django: отправка входных данных формы в URL - PullRequest
0 голосов
/ 28 апреля 2020

Я новичок в Django и пытался создать систему управления студентами в веб-приложении, в которой студенты добавляются администратором, а студенты могут редактировать свои данные, введя свой регистрационный идентификатор.

В моделях .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)

форма для ввода идентификатора регистрации студентов по индексу. html страница

  <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>

Теперь я хочу от go до /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 тогда я успешно отображаю страницу с подробностями

1 Ответ

2 голосов
/ 28 апреля 2020

Вместо того чтобы делать запрос POST, вы должны сделать запрос GET, так как этот запрос ничего не меняет в вашей базе данных. Теперь вы можете сделать реализацию следующим образом:

 <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 / студенты / подробности /? Enrollmentid = 123 & dob = 2020-01-01

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...