51 lines
2.0 KiB
Python
51 lines
2.0 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) # todo: check member status here
|
|
|
|
|
|
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')
|