valexeich
@valexeich

Что делать если при смене класса местами меняется форма и работает только одна?

У меня такая проблема, я создал два класса WatchingAnime и Comment, первый для добавление к списку 'смотрю' по кнопке, второй для добавления комментариев, эти два класса унаследованы от FormMixin, потом унаследовал эти два класса к своему основному классу где находиться информация об аниме, и при смене местами этих классов работает только та форма которая стоит раньше, что нужно сделать чтобы работали сразу две?

views:
Класс комментариев:

class Comment(FormMixin):

    form_class = CommentsForm

    def post(self, request, *args, **kwargs):
        comment_form = self.get_form()
        if comment_form.is_valid:
            return self.form_valid(comment_form)
        else:
            return self.form_invalid(comment_form)

    def form_valid(self, comment_form):
        self.object = comment_form.save(commit=False)
        self.object.animes = self.get_object()
        self.object.author = self.request.user
        if self.request.POST.get("parent_id", None):
            parent_id = int(self.request.POST.get('parent_id'))
            parent_obj = Comments.objects.get(id=parent_id)
            self.object.parent = parent_obj
        self.object.save()
        return super().form_valid(comment_form)

    def get_context_data(self, **kwargs):
        """Insert the form into the context dict."""
        if 'form' not in kwargs:
            kwargs['comment_form'] = self.get_form()
        return super().get_context_data(**kwargs)


Класс для добавление Аниме:

class WatchingAnime(FormMixin):

    form_class = ProfileWatchingForm

    def anime_add(self, request, *args, **kwargs):
        form_anime = self.get_form()
        if form_anime.is_valid:
            return self.form_valid(form_anime)
        else:
            return self.form_invalid(form_anime)

    def form_valid(self, form_anime):
        self.object = form_anime.save(commit=False)
        prof = Profile.objects.get(id=self.request.user.id)
        if self.request.POST.get('add_anime', None):
            anime_id = int(self.request.POST.get('add_anime'))
            anime_obj = Anime.objects.get(id=anime_id)
            if Anime.objects.get(id=anime_id) in prof.watching.all():
                self.object.watching = prof.watching.remove(anime_obj)
            else:
                self.object.watching = prof.watching.add(anime_obj)
        self.object.save()
        return super().form_valid(form_anime)


Класс где вся инфа об аниме и унаследованные формы:

class AnimeDetailView(DetailView,  WatchingAnime,  Comment):
    model = Anime
    slug_field = 'url'
    template_name = 'anime/anime_detail.html'
    context_object_name = 'anime_detail'


    def get_success_url(self, **kwargs):
        return reverse_lazy('anime:anime_detail', kwargs={'slug': self.get_object().url})


    def get_context_data(self, *args,**kwargs):
        context = super().get_context_data(*args, **kwargs)
        context['comments'] = Comments.objects.filter(parent__isnull=True)
        return context


Выглядит это так в зависимости от того какой класс унаследован раньше, по отдельности эти формы нормально работают.

61ed7af621e3e579082753.png

61ed7b018e4e8755531797.png
  • Вопрос задан
  • 75 просмотров
Пригласить эксперта
Ответы на вопрос 1
@bacon
Потому что MRO и ты не понимаешь как работает множественное наследование, хотя наверно и само ООП до тебя не дошло.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы