Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- models
- class Post(models.Model):
- created_by = models.ForeignKey(User, verbose_name="user", on_delete='CASCADE')
- article_title = models.CharField(max_length=200, db_index=True)
- slug = models.SlugField(max_length=150, blank=True, unique=True)
- article_text = models.TextField(blank=True, db_index=True)
- article_date = models.DateTimeField(auto_now_add=True)
- tags = models.ManyToManyField('Tag', blank=True, related_name='posts')
- picture = models.ImageField(null=True, blank=True, upload_to='image/', verbose_name='image')
- comments = GenericRelation('comments')
- # likes = models.PositiveIntegerField(default=0)
- # dislikes = models.PositiveIntegerField(default=0)
- def get_absolute_url(self):
- return reverse('post_detail_url', kwargs={'slug': self.slug})
- def get_update_url(self):
- return reverse('post_update_url', kwargs={'slug': self.slug})
- def get_delete_url(self):
- return reverse('post_delete_url', kwargs={'slug': self.slug})
- # def get_delete_comment_url(self):
- # return reverse('comment_delete_url', kwargs={'slug': self.slug})
- def save(self, *args, **kwargs):
- if not self.id:
- self.slug = generate_slug(self.article_title)
- super().save(*args, **kwargs)
- def __str__(self):
- return self.article_title
- class Meta:
- ordering = ['-article_date']
- class Comments(models.Model):
- author = models.ForeignKey(User, verbose_name='Пользователь', on_delete='CASCADE')
- post = models.ForeignKey(Post, verbose_name='Заметка', on_delete='CASCADE')
- text = models.TextField()
- date_comments = models.DateTimeField(auto_now_add=True)
- views
- class PostDelete(ObjectDeleteMixin, View):
- model = Post
- template = 'network/postDelete.html'
- redirect_url = 'post_list_url'
- def delete_comment(request, id, slug):
- try:
- comment = Comments.objects.get(id=id)
- comment.delete()
- return redirect('post_detail_url', slug)
- except Comments.DoesNotExist:
- return HttpResponseNotFound("<h2> Комментарий уже был удален. Вернитесь и обновите страницу. </h2>")
- forms
- class PostForm(LoginRequiredMixin, forms.ModelForm, CreateView):
- class Meta:
- model = Post
- fields = [
- 'article_title',
- 'article_text',
- 'tags',
- 'picture',
- ]
- widgets = {
- 'article_title': forms.TextInput(attrs={'class': 'form-control', 'size': 14, 'title': 'Enter your title'}),
- 'article_text': forms.Textarea(attrs={'class': 'form-control', 'size': 14, 'title': 'Enter body post'}),
- 'tags': forms.SelectMultiple(attrs={'class': 'form-control', 'title': 'choice tag'}),
- }
- def form_valid(self, form):
- form.instance.created_by = self.request.user
- return super().form_valid(form)
- def clean_slug(self):
- new_slug = self.cleaned_data['slug'].lower()
- if new_slug == 'create':
- raise ValidationError('wrong name for "Slug"')
- return new_slug
- class CommentForm(ModelForm):
- class Meta:
- model = Comments
- fields = [
- 'text'
- ]
- utils
- class ObjectDeleteMixin:
- model = None
- template = None
- redirect_url = None
- def get(self, request, slug):
- obj = self.model.objects.get(slug__iexact=slug)
- return render(request, self.template, context={self.model.__name__.lower: obj})
- def post(self, request, slug):
- obj = self.model.objects.get(slug=slug)
- print(obj)
- print(Post)
- obj.delete()
- return redirect(reverse(self.redirect_url))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement