Reputation: 597
I am new to Django and was trying to create a web-app student management system in which students are added by admin and students can edit their details by entering their enrollment-id.
In models.py I added this model
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)
form for entering student enrollment id at index.html page is
<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>
Now I want to go to /students/detail/{enrollment id given by user}
route how can i pass the input to url
In views.py I have defined
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})
In urls.py I have defined
app_name = 'students'
urlpatterns = [
path('', views.index, name='index'),
path('detail/<student_id>', views.detail, name='detail')
]
If i manually enter http://localhost:8000/students/detail/ABC1235
then I successfully render the detail page
Upvotes: 0
Views: 358
Reputation: 52028
Instead of making a POST request, you should make a GET
request, as this request is not modifying anything in your Database. Now, you can make the implementation like this:
<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>
Then you can update your view like this:
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})
Then on submitting the form, it will redirect to url like this: http://localhost:8000/students/detail/?enrollmentid=123&dob=2020-01-01
Upvotes: 2