from django.views.generic import UpdateView, DetailView, ListView from django.views.generic.edit import CreateView, DeleteView, UpdateView from django.contrib.auth.mixins import LoginRequiredMixin from django.urls import reverse from .models import Note from .forms import NoteCreateForm class NoteCreateView(LoginRequiredMixin, CreateView): model = Note form_class = NoteCreateForm def get_form_kwargs(self): kwargs = super(NoteCreateView, self).get_form_kwargs() kwargs.update({'user': self.request.user}) return kwargs def get_success_url(self): if 'add_new' in self.request.POST: return reverse('notes:create') else: if self.object.post: return reverse('posts:detail', kwargs={"pk": self.object.post.pk}) else: return reverse('notes:create') class NoteUpdateView(LoginRequiredMixin, UpdateView): model = Note fields = ['title', 'url', 'body_markdown', 'post', 'status', 'plan'] def get_context_data(self, **kwargs): context = super(NoteUpdateView, self).get_context_data(**kwargs) context['is_update'] = True return context def get_success_url(self): return reverse('posts:detail', kwargs={"pk": self.object.post.pk}) class NoteListView(LoginRequiredMixin, ListView): model = Note def get_queryset(self): if self.kwargs['status']: status_reverse = dict((v, k) for k, v in Note.STATUS) status = status_reverse[self.kwargs['status'].title()] return Note.objects.filter(user=self.request.user, status=status) return Note.objects.filter(user=self.request.user) def get_context_data(self, **kwargs): context = super(NoteListView, self).get_context_data(**kwargs) context['note_statuses'] = Note.STATUS return context