#models
from django.db import models
from django.urls import reverse
import misaka
from taggit.managers import TaggableManager
class Post(models.Model):
titile = models.CharField(max_length=250)
created_at = models.DateTimeField(auto_now=True)
text = models.TextField()
text_html = models.TextField(editable=False)
tags = TaggableManager()
def __str__(self):
return self.text
def save(self,*args,**kwargs):
self.text_html = misaka.html(self.text)
super().save(*args,**kwargs)
def get_absolute_url(self):
return reverse(
"posts:post_detail",
kwargs={
"username": self.user.username,
"pk": self.pk
}
)
class Actual(models.Model):
created_at = models.DateTimeField(auto_now=True)
text = models.TextField()
text_html = models.TextField(editable=False)
def __str__(self):
return self.text
def save(self,*args,**kwargs):
self.text_html = misaka.html(self.text)
super().save(*args,**kwargs)
def get_absolute_url(self):
return reverse(
"posts:actual",
kwargs={
"username": self.user.username,
}
)
#views
from django.shortcuts import render
from django.contrib.auth.mixins import LoginRequiredMixin
from django.urls import reverse_lazy
from django.views import generic
from django.http import Http404
from braces.views import SelectRelatedMixin
from . import models,forms
from django.contrib import messages
from django.contrib.auth import get_user_model
from taggit.models import Tag
User = get_user_model()
# Create your views here.
class PostList(SelectRelatedMixin, generic.ListView):
model = models.Post
select_related = ("user")
class Actual(generic.ListView):
models = models.Actual
template_name = 'posts/actual.html'
class UserPosts(generic.ListView):
model = models.Post
template_name = "posts/user_post.html"
def get_queryset(self):
try:
self.post_user = User.objects.prefetch_related("posts").get(
username__iexact=self.kwargs.get("username")
)
except User.DoesNotExist:
raise Http404
else:
return self.post_user.posts.all()
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
context["post_user"] = self.post_user
return context
class PostDetail(SelectRelatedMixin, generic.DetailView):
model = models.Post
select_related = ("user")
def get_queryset(self):
queryset = super().get_queryset()
return queryset.filter(
user__username__iexact=self.kwargs.get("username")
)
class CreatePost(LoginRequiredMixin, SelectRelatedMixin, generic.CreateView):
# form_class = forms.PostForm
form_class = forms.Post
model = models.Post
def get_form_kwargs(self):
kwargs = super().get_form_kwargs()
kwargs.update({"user": self.request.user})
return kwargs
def form_valid(self, form):
self.object = form.save(commit=False)
self.object.user = self.request.user
self.object.save()
return super().form_valid(form)
class DeletePost(LoginRequiredMixin, SelectRelatedMixin, generic.DeleteView):
model = models.Post
select_related = ("user", "group")
success_url = reverse_lazy("posts:all")
def get_queryset(self):
queryset = super().get_queryset()
return queryset.filter(user_id=self.request.user.id)
def delete(self, *args, **kwargs):
messages.success(self.request, "Post usunięto")
return super().delete(*args, **kwargs)
#forms
class ModelPost:
class Meta:
model = Post
fields = [
'titile',
'text',
'tags',
]