Program 11

Develop a search application in Django using AJAX that displays courses enrolled by a student being searched.

views.py

from django.shortcuts import render
from django.http import HttpResponse
from .models import Student

# Create your views here.
def courselist(request):
    if request.method == 'POST':
        usn=request.POST['usn']
        try:
            obj=Student.objects.get(usn=usn)
            ans=''
            l=obj.courses.all().values()
            for x in l:
                ans=ans+x['cname']+'<br>'
            return HttpResponse(ans)
        except Exception:
            return HttpResponse('STUDENT USN DOES NOT EXIST/INVALID')
    else:
        return HttpResponse("method is not post")


def course_page(request):
    return render(request, 'course.html')

urls.py

from django.urls import path
from .views import course_page, courselist

urlpatterns = [
    path('course', course_page),
    path('courselist', courselist, name='courselist'),
]

models.py

from django.db import models

# Create your models here.
class Course(models.Model):
     cid=models.CharField(max_length=10, primary_key=True)
     cname=models.CharField(max_length=30)
     def __str__(self):
          return self.cname

class Student(models.Model):
    usn=models.CharField(max_length=10, primary_key=True)
    name=models.CharField(max_length=30)
    sem=models.IntegerField()
    courses=models.ManyToManyField(Course)
    

admin.py

from django.contrib import admin
from .models import Student, Course

# Register your models here.
class StudentAdmin(admin.ModelAdmin):
    list_display = ['usn', 'name', 'sem']
    list_filter = ['sem']
    search_fields = ['usn', 'name']
    filter_horizontal = ['courses']
    
admin.site.register(Student, StudentAdmin)
admin.site.register(Course)

templates/course.html

<!doctype html>
<html>
    <body>
        <h1>Student Course Enrollment Details</h1>
        <div id="message"></div>
        <form id="courseenroll" method="POST">
            {% csrf_token %}
            <label>enter student usn </label>
            <input type="text" id="usn" />
            <button type="submit">check</button>
        </form>
        <p id="ans"></p>
    </body>
    <title>Student Course enrolled details</title>
    <script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
    <script>
        $(document).ready(function () {
            $("#courseenroll").on("submit", function (event) {
                event.preventDefault();

                $.ajax({
                    url: '{% url "courselist" %}',
                    type: "POST",
                    data: {
                        usn: $(usn).val(),
                        csrfmiddlewaretoken: $(
                            "input[name=csrfmiddlewaretoken]",
                        ).val(),
                    },
                    success: function (data) {
                        $("#ans").html(data);
                    },
                    error: function (error) {
                        $("#message").html(
                            "<p>An error occurred. Please try again.</p>",
                        );
                    },
                });
            });
        });
    </script>
</html>