Как соединить ajax запрос и DetailView(django)?
view.py
class SeriesViewClass(FormMixin,DetailView):
model = AnimeSeasons
form_class = UserCommentsForm
template_name = 'sitepage/series.html'
def get_success_url(self,**kwargs):
return reverse_lazy('SeriesPage',kwargs = {'slug':self.get_object().slug,'season_num':self.get_object().season_num})
def get_queryset(self):
return AnimeSeasons.objects.filter(slug=self.kwargs['slug']).filter(season_num = self.kwargs['season_num'])
def get_context_data(self,**kwargs):
context = super(SeriesViewClass, self).get_context_data(**kwargs)
context['season'] = AnimeSeasons.objects.filter(pk = self.get_object().pk)
context['series'] = AnimeSeries.objects.filter(anime_season_id = self.get_object().id)
context['first'] = AnimeSeries.objects.filter(anime_season_id = self.get_object().id).filter(series_num = 1)
context['comments'] = Comments.objects.filter(anime_season_id = self.get_object().id)
return context
def post(self,request,slug,season_num):
print(self.request)
if request.is_ajax():
new_comment = Comments(anime_season_id = self.get_object().id,author = self.request.user,text=text)
new_comment.save()
return JsonResponse({'message': 'OK'})
else:
return JsonResponse({'message': 'Failed'})
def form_valid(self,form):
self.object = form.save(commit = True)
self.object.anime_season_id = self.get_object().id
self.object.author = self.request.user
self.object.save()
return super().form_valid(form)
def form_invalid(self,form):
pass
models.py
from django.db import models
from django.contrib.auth.models import User
from django.urls import reverse
class anime(models.Model):
anime_url = models.SlugField(null = True,max_length = 20,verbose_name = "URL")
anime_photo = models.FileField(upload_to='media',verbose_name='Фото')
anime_name = models.CharField(max_length = 50,verbose_name='Название Аниме')
anime_raiting = models.CharField(null=True,max_length = 5,verbose_name='Рейтинг')
def __str__(self):
return self.anime_name
class Meta:
verbose_name_plural = 'Все аниме'
verbose_name = 'Аниме'
class AnimeSeasons(models.Model):
anime = models.ForeignKey(anime,on_delete=models.CASCADE,verbose_name = 'Название Аниме',blank = True,null = True,related_name='seasons')
slug = models.SlugField(null = True,max_length = 20,verbose_name = "URL")
season_num = models.CharField(null = True,max_length = 3,verbose_name='Номер сезона')
season_photo = models.FileField(upload_to='media',verbose_name='Фото',blank = True,null = True)
season_raiting = models.CharField(null=True,max_length = 5,verbose_name='Рейтинг')
description = models.TextField(null = True,blank = True,verbose_name='Описание')
class Meta:
verbose_name_plural = 'Все сезоны'
verbose_name = 'Сезон'
def __str__(self):
return f'{self.slug} - {self.season_num}'
def get_absolute_url(self):
return ('animeseasons:detail', (), {
'slug': self.anime.anime_url,
'season_num': self.season_num,
})
class AnimeSeries(models.Model):
anime_season = models.ForeignKey(AnimeSeasons,on_delete=models.CASCADE,verbose_name = 'Сезон Аниме',blank = True,null = True)
series_num = models.CharField(null = True,max_length = 50,verbose_name='Номер Серии')
link = models.CharField(max_length = 50,verbose_name='Ссылка на плеер')
class Meta:
verbose_name_plural = 'Все серии сезона'
verbose_name = 'Серия'
def __str__(self):
return self.series_num
class Comments(models.Model):
anime_season = models.ForeignKey(AnimeSeasons,on_delete=models.CASCADE,verbose_name = 'Сезон',blank = True,null = True)
author = models.ForeignKey(User,on_delete=models.CASCADE,verbose_name = 'Автор комментария',blank = True,null = True)
date = models.DateTimeField(auto_now=True,verbose_name='Дата написания')
text = models.TextField(verbose_name='Текст Комментария')
class Meta:
verbose_name_plural = 'Все комментарии'
verbose_name = 'Комментарий'
def __str__(self):
return self.text
forms.py
from django import forms
from django.forms import Textarea
from .models import Comments,Chat
from django.contrib.auth.forms import AuthenticationForm
from django.contrib.auth.models import User
class UserCommentsForm(forms.ModelForm):
class Meta:
model = Comments
fields = ('text',)
def __init__(self,*args,**kwargs):
super().__init__(*args,**kwargs)
for field in self.fields:
self.fields[field].widget.attrs['class'] = 'form-control'
self.fields['text'].widget = Textarea(attrs={'rows':1})
class AuthUser(AuthenticationForm,forms.ModelForm):
class Meta:
model = User
fields = ('username','password')
class RegisterForm(forms.ModelForm):
class Meta:
model = User
fields = ('username','password')
def __init__(self,*args,**kwargs):
super().__init__(*args,**kwargs)
for field in self.fields:
self.fields[field].widget.attrs['class'] = 'form-control'
def save(self, commit=True):
user = super().save(commit=False)
user.set_password(self.cleaned_data["password"])
if commit:
user.save()
return user
urls.py
from django.urls import path,include
from .views import StartpageCreateView,LogoutUser,SeriesViewClass,AuthUserClass,RegisterUserClass,SeasonsViewFunck,SeriesViewClass,ChatViewClass
urlpatterns = [
path('',StartpageCreateView.as_view(),name = 'sitepage'),
path('logout/',LogoutUser.as_view(),name = 'logout'),
path('auth/',AuthUserClass.as_view(),name = 'Auth'),
path('register/',RegisterUserClass.as_view(),name = 'Register'),
path('chat/',ChatViewClass.as_view(), name = 'Chat'),
path('<slug:slug>/',SeasonsViewFunck,name='SeasonPage'),
path('<slug:slug>/<int:season_num>',SeriesViewClass.as_view(),name='SeriesPage'),
]
Что надо сделать,чтобы джанго принимал ajax запросы и добавлял комментарий в базу данных(Чтобы страница не перезагружалась)?
И как импортировать JavaScript файлы из static(не видит путь)?

series.html
{% extends 'sitepage/sitepage.html' %}
{% load static %}
{% block title %}Серии{% endblock %}
{% block css %}{% static 'sitepage/sitepage.css' %}{% endblock %}
{% block js %}{% static 'sitepage/ajax.js'%}{% endblock %}
{% block content %}
ajax.js
$(document).ready(function() {
$('button').click(function(e) {
e.preventDefault();
var text = document.getElementById("input").value;
var lock = document.location.pathname;
$.ajax({
url:lock,
method:'POST',
dataType:'json',
data:{text:text},
success: function(text){
alert(text);
}
})
})
})