видео:
исходный код:
# views.py class ArticleCreateView(LoginRequiredMixin, CustomSuccessMessageMixin, CreateView): login_url = reverse_lazy('login_page') model = Articles template_name = 'edit_page.html' form_class = ArticleForm success_url = reverse_lazy('edit_page') success_msg = 'Запись создана' def get_context_data(self,**kwargs): kwargs['list_articles'] = Articles.objects.all().order_by('-id') return super().get_context_data(**kwargs) def form_valid(self,form): self.object = form.save(commit=False) self.object.author = self.request.user self.object.save() return super().form_valid(form) class ArticleUpdateView(LoginRequiredMixin, CustomSuccessMessageMixin,UpdateView): model = Articles template_name = 'edit_page.html' form_class = ArticleForm success_url = reverse_lazy('edit_page') success_msg = 'Запись успешно обновлена' def get_context_data(self,**kwargs): kwargs['update'] = True return super().get_context_data(**kwargs) def get_form_kwargs(self): kwargs = super().get_form_kwargs() if self.request.user != kwargs['instance'].author: return self.handle_no_permission() return kwargs class ArticleDeleteView(LoginRequiredMixin, DeleteView): model = Articles template_name = 'edit_page.html' success_url = reverse_lazy('edit_page') success_msg = 'Запись удалена' def post(self,request,*args,**kwargs): messages.success(self.request, self.success_msg) return super().post(request) def delete(self, request, *args, **kwargs): self.object = self.get_object() if self.request.user != self.object.author: return self.handle_no_permission() success_url = self.get_success_url() self.object.delete() return HttpResponseRedirect(success_url)
#models.py class Articles(models.Model): author = models.ForeignKey(User, on_delete = models.CASCADE, verbose_name='Владелец статьи', blank = True, null = True ) create_date = models.DateTimeField(auto_now=True) name = models.CharField(max_length=200, verbose_name='Название') text = models.TextField(verbose_name='Текст') def __str__(self): return self.name class Meta: verbose_name='Статью' verbose_name_plural='Статьи'
#forms.py class ArticleForm(forms.ModelForm): class Meta: model = Articles fields = ('name','text') def __init__(self,*args,**kwargs): super().__init__(*args,**kwargs) for field in self.fields: self.fields[field].widget.attrs['class'] = 'form-control'