search Functionality
forms.py
class SearchForm(forms.ModelForm):
class Meta:
model = Student
fields = ['first_name', 'last_name', 'email', 'date_of_birth']
def __init__(self, *args, **kwargs):
super(SearchForm, self).__init__(*args, **kwargs)
self.fields['first_name'].required = False
self.fields['last_name'].required = False
self.fields['email'].required = False
self.fields['date_of_birth'].required = False
for field_name, field in self.fields.items():
field.widget.attrs.update({
'class': 'form-control',
'id': f"defaultForm-{field_name}",
})
class StudentDetailsForm(forms.ModelForm):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
for field in self.fields.values():
field.widget.attrs['disabled'] = True
class Meta:
model = Student
fields = '__all__'
views.py
from django.shortcuts import render, redirect,get_object_or_404
from .forms import StudentForm,SearchForm,StudentDetailsForm
from .models import Student
def find_student(request):
if request.method == 'POST':
form = SearchForm(request.POST)
if form.is_valid():
filter_kwargs = {}
first_name = form.cleaned_data['first_name']
if first_name:
filter_kwargs['first_name__icontains'] = first_name
last_name = form.cleaned_data['last_name']
if last_name:
filter_kwargs['last_name__icontains'] = last_name
email = form.cleaned_data['email']
if email:
filter_kwargs['email__icontains'] = email
date_of_birth = form.cleaned_data['date_of_birth']
if date_of_birth:
filter_kwargs['date_of_birth'] = date_of_birth
# Perform the search using the form input
students = Student.objects.filter(**filter_kwargs)
if students.count() == 1:
# Only one result found, redirect to the update form
students = students.first()
form = StudentForm(instance=students)
return render(request, 'students/student_form.html', {'form': form})
# Pass the search results to the template
context = {'students': students}
return render(request, 'students/search_results.html', context)
else:
form = SearchForm()
return render(request, 'students/search_form.html', {'form': form})
def student_details(request, student_id):
student = get_object_or_404(Student, id=student_id)
form = StudentDetailsForm(instance=student)
return render(request, 'students/student_details.html', {'form': form})
students/search_form.html
{% extends 'base.html' %}
{% block content %}
<!-- এখানে কনটেন্ট পরিবর্তনের কোড থাকবে -->
<h1></h1>
<form method="post" action="{% url 'find_student' %}">
{% csrf_token %}
{% for field in form %}
<div class="col-md-4 mb-4">
<div class="form-group">
<label for="{{ field.auto_id }}">{{ field.label }}</label>
<div class="input-group">
<div class="input-group-prepend">
<span class="input-group-text">
<i class="fas fa-envelope"></i>
</span>
</div>
{{ field }}
</div>
</div>
</div>
{% endfor %}
<div class="text-center"> <button class="btn btn-primary" type="submit">Search</button></div>
</form>
<a href="{% url 'student_list' %}">Back to list</a>
{% endblock %}
<!-- students/student_form.html -->
students/search_results.html
<!-- search_results.html -->
{% if students %}
<h1>Search Results:</h1>
<ul>
{% for student in students %}
<li>{{ student.first_name }} {{ student.last_name }} <a href="{% url 'student_details' student.id %}">{{ student.first_name }}</a></p></li>
{% endfor %}
</ul>
{% else %}
<p>No students found.</p>
{% endif %}
students/student_details.html
<!-- student_details.html -->
<h1>Student Details</h1>
<form>
{{ form.as_p }}
</form>
urls.py
from django.urls import path
from .views import student_list, student_create, student_update, student_delete,find_student,student_details
urlpatterns = [
path('students/<int:student_id>/', student_details, name='student_details'),
path('find/', find_student, name='find_student'),
Last updated