Views.py
models.py
urls.py
Выдаёт не нужные мне серии,а если больше 2 сезонов,выдаёт ''MultipleObjectsReturned at // get() returned more than one AnimeSeasons -- it returned 2!'' И сам немного не понимаю, как пользоваться моделями в DetailView и CreateView. Если будет критика кода,буду только рад.
Python:
from django.views.generic import ListView,CreateView,DetailView
from django.shortcuts import render,get_object_or_404
from .models import anime,AnimeSeasons,AnimeSeries,Comments
from django.contrib.auth.views import LogoutView,LoginView
from django.urls import reverse_lazy
from .forms import AuthUser,RegisterForm
from django.contrib.auth.models import User
from django.contrib.auth import authenticate,login
from .forms import UserCommentsForm
class StartpageCreateView(ListView):
model = anime
template_name = 'sitepage/sitepage.html'
context_object_name = 'all_anime'
class LogoutUser(LogoutView):
next_page = reverse_lazy('sitepage')
class AuthUserClass(LoginView):
template_name = 'sitepage/auth.html'
form_class = AuthUser
success_url = reverse_lazy('sitepage')
def get_success_url(self):
return self.success_url
class RegisterUserClass(CreateView):
model = User
template_name = 'sitepage/register.html'
form_class = RegisterForm
success_url = reverse_lazy('sitepage')
def form_valid(self,form):
form_valid = super().form_valid(form)
username = form.cleaned_data['username']
password = form.cleaned_data['password']
auth_user = authenticate(username = username,password = password)
login(self.request,auth_user)
return form_valid
class SeasonViewClass(DetailView):
model = anime
slug_field = 'slug'
slug_url_kwarg = 'slug'
template_name = 'sitepage/season.html'
context_object_name = 'all_seasons'
query_pk_and_slug = True
def get_context_data(self, **kwargs):
context = super(SeasonViewClass, self).get_context_data(**kwargs)
context['season_inf'] = AnimeSeasons.objects.filter(slug = self.get_object().slug)
return context
def get_success_url(self):
print(self.get_object().slug)
return reverse_lazy(self.get_object().slug)
class SeriesViewClass(CreateView):
model = AnimeSeasons
template_name = 'sitepage/series.html'
slug_field = 'slug'
slug_url_kwarg = 'slug'
form_class = UserCommentsForm
def get_context_data(self, **kwargs):
context = super(SeriesViewClass, self).get_context_data(**kwargs)
context['season_inf'] = AnimeSeasons.objects.filter(slug = self.get_object().slug).filter(season_num = self.get_object().season_num)
context['season_series'] = AnimeSeries.objects.filter(slug_season = self.get_object().season_num)
return context
def get_success_url(self):
print(self.get_object().season_num)
return reverse_lazy(self.get_object().slug)
models.py
Python:
from django.db import models
from django.contrib.auth.models import User
from django.urls import reverse
class anime(models.Model):
slug = models.SlugField(null = True,max_length = 10,verbose_name = "Slug")
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='Рейтинг')
class Meta:
verbose_name_plural = 'Все аниме'
verbose_name = 'Аниме'
class Comments(models.Model):
anime_name = models.ForeignKey(anime,on_delete=models.CASCADE,verbose_name = 'Название Аниме',blank = True,null = True,related_name='Comments_anime')
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='Текст Комментария')
def __str__(self) :
return self.date
class Meta:
verbose_name_plural = 'Все комментарии'
verbose_name = 'Комментарий'
class AnimeSeasons(models.Model):
anime_name = models.ForeignKey(anime,on_delete=models.CASCADE,verbose_name = 'Название Аниме',blank = True,null = True)
slug = models.SlugField(null = True,max_length = 10,verbose_name = "Slug")
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 = 'Сезон'
class AnimeSeries(models.Model):
anime_season = models.ForeignKey(anime,on_delete=models.CASCADE,verbose_name = 'Название Аниме',blank = True,null = True)
slug_season = models.SlugField(null = True,max_length = 5,verbose_name='Номер сезона')
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 = 'Серия'
urls.py
Python:
from django.urls import path,include
from .views import StartpageCreateView,LogoutUser,SeriesViewClass,AuthUserClass,RegisterUserClass,SeasonViewClass
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('<slug:slug>/',SeasonViewClass.as_view(),name='SeasonPage'),
path('<slug:slug>/<slug:slug_season>',SeriesViewClass.as_view(),name='SeasonPage'),
]
Выдаёт не нужные мне серии,а если больше 2 сезонов,выдаёт ''MultipleObjectsReturned at // get() returned more than one AnimeSeasons -- it returned 2!'' И сам немного не понимаю, как пользоваться моделями в DetailView и CreateView. Если будет критика кода,буду только рад.