У меня такая проблема, я создал два класса 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
Выглядит это так в зависимости от того какой класс унаследован раньше, по отдельности эти формы нормально работают.