-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathdata.py
61 lines (53 loc) · 2.28 KB
/
data.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
from django.shortcuts import get_object_or_404
from django_tables2 import SingleTableView, RequestConfig
from django_filters.views import FilterView
from my_apps.dashboard.models import FullData
from my_apps.dashboard.utils import FullDataTable, FullDataFilter
from django.contrib import messages
from django.http import JsonResponse
from my_apps.users.utils import is_authorized
from django.views.decorators.cache import cache_page
from django.utils.decorators import method_decorator
# This is similar to ListView
class DataView(SingleTableView, FilterView):
model = FullData
table_class = FullDataTable
template_name = 'data.html'
filterset_class = FullDataFilter
table_pagination = {'per_page': 50}
def __init__(self, *args, **kwargs):
self.object_list = kwargs.pop('queryset', None)
super().__init__(*args, **kwargs)
@method_decorator(cache_page(60 * 15)) # 15 minutes
def dispatch(self, *args, **kwargs):
return super().dispatch(*args, **kwargs)
# # Custom filtering
# def get_queryset(self):
# return FullData.objects.filter(
# data__name__startswith="Person",
# data__created_at__year=2024,
# data__age__gt=18,
# hair__hair_description__contains="description",
# hair_color__isnull=False
# ).order_by("id")
def get_table_data(self):
return self.get_queryset()
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
context['filter'] = self.filterset_class(self.request.GET, queryset=self.get_table_data())
table = FullDataTable(context['filter'].qs)
RequestConfig(self.request, paginate=self.table_pagination).configure(table)
context['table'] = table
context['title'] = 'Data'
return context
@staticmethod
@is_authorized(permissions=['delete_data'])
def delete(request, pk):
if request.method == 'DELETE':
instance = get_object_or_404(FullData, pk=pk)
data = instance.data
instance.delete()
data.delete()
messages.success(request, "Deleted.")
return JsonResponse({'success': True}, status=200)
return JsonResponse({'success': False, 'error': 'Invalid request method'}, status=400)