видео:
исходный код:
# 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'