Почему из базы данных не вытаскивается то, что мне нужно(django)?

NikitaSel

Новичок
Пользователь
Апр 10, 2020
5
0
1
Views.py

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. Если будет критика кода,буду только рад.
 

Форум IT Специалистов