77 lines
2.4 KiB
Python
77 lines
2.4 KiB
Python
from django.shortcuts import get_object_or_404
|
|
from django.utils import timezone
|
|
from django.views.generic import ListView, DetailView
|
|
from rest_framework import viewsets
|
|
from django_filters import DateTimeFromToRangeFilter
|
|
from django_filters.rest_framework import FilterSet
|
|
from django_filters.widgets import RangeWidget
|
|
from mhackspace.blog.models import Post, Category
|
|
from mhackspace.blog.serializers import PostSerializer, CategorySerializer
|
|
|
|
|
|
class BlogPost(DetailView):
|
|
context_object_name = "post"
|
|
queryset = Post.objects.filter(active=True, members_only=False)
|
|
|
|
def get_context_data(self, *args, **kwargs):
|
|
context = super(BlogPost, self).get_context_data(*args, **kwargs)
|
|
context["open_graph"] = {
|
|
"image": self.object.image,
|
|
"title": self.object.title,
|
|
"type": "blog",
|
|
"description": self.object.excerpt,
|
|
}
|
|
return context
|
|
|
|
|
|
class PostList(ListView):
|
|
context_object_name = "posts"
|
|
paginate_by = 5
|
|
|
|
def get_queryset(self):
|
|
if "category" in self.kwargs:
|
|
self.category = get_object_or_404(
|
|
Category, slug=self.kwargs["category"]
|
|
)
|
|
return Post.objects.filter(
|
|
active=True,
|
|
categories=self.category,
|
|
published_date__lte=timezone.now(),
|
|
members_only=False,
|
|
)
|
|
|
|
return Post.objects.filter(
|
|
active=True, published_date__lte=timezone.now(), members_only=False
|
|
)
|
|
|
|
|
|
class PostFilter(FilterSet):
|
|
published_date = DateTimeFromToRangeFilter(
|
|
widget=RangeWidget(attrs={"placeholder": "dd/mm/yyyy hh:mm"})
|
|
)
|
|
updated_date = DateTimeFromToRangeFilter(
|
|
widget=RangeWidget(attrs={"placeholder": "dd/mm/yyyy hh:mm"})
|
|
)
|
|
|
|
class Meta:
|
|
model = Post
|
|
fields = (
|
|
"title", "slug", "author__name", "published_date", "updated_date"
|
|
)
|
|
|
|
|
|
class PostViewSet(viewsets.ModelViewSet):
|
|
queryset = Post.objects.filter(active=True)
|
|
filter_class = PostFilter
|
|
serializer_class = PostSerializer
|
|
search_fields = ("title", "slug", "categories", "author__name")
|
|
ordering_fields = ("title", "published_date", "updated_date", "author")
|
|
|
|
|
|
class CategoryViewSet(viewsets.ModelViewSet):
|
|
queryset = Category.objects.all()
|
|
serializer_class = CategorySerializer
|
|
search_fields = ("name", "slug")
|
|
ordering_fields = ("name", "slug")
|
|
filter_fields = ("name", "slug")
|