-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathdata_modify.py
67 lines (58 loc) · 2.35 KB
/
data_modify.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
62
63
64
65
66
67
from django.shortcuts import redirect
from my_apps.dashboard.forms import FullDataForm
from django.contrib import messages
from django.views import View
from django.shortcuts import render, get_object_or_404
from my_apps.dashboard.models import FullData
from my_apps.users.utils import is_authorized
class DataModifyView(View):
@is_authorized(permissions=['post_data'])
def get(self, request, pk=None):
context = {
'title': self.get_text(pk, 'title'), 'pk': pk,
'form': self.get_full_data_form(pk)
}
return render(request, 'data_modify.html', context)
@is_authorized(permissions=['post_data'])
def post(self, request, pk=None):
if pk == 'None':
pk = None
form = FullDataForm(request.POST, pk=pk, context={'request': request})
if form.is_valid():
form.save()
messages.success(request, self.get_text(pk, 'message'))
return self.get_text(pk, 'path')
if bool(self.request.GET.get('ignore_validation', False)):
form.errors.clear()
context = {
'title': self.get_text(pk, 'title'),
'pk': pk, 'form': form
}
return render(request, 'data_modify.html', context)
# Utils
def get_full_data_form(self, pk):
instance = get_object_or_404(FullData, pk=pk) if pk else None
if instance:
return FullDataForm(instance=instance, initial=self.get_initials(instance), context={'request': self.request})
return FullDataForm(context={'request': self.request})
@staticmethod
def get_initials(instance):
return {
'name': instance.data.name,
'email': instance.data.email,
'age': instance.data.age,
'gender': instance.data.gender,
'dob': instance.data.dob,
'tob': instance.data.tob,
'slug': instance.data.slug,
'website': instance.data.website,
'ip_address': instance.data.ip_address
}
@staticmethod
def get_text(pk, text_type):
if text_type == 'title':
return f'{"Edit" if pk else "Add" } Data'
elif text_type == 'message':
return f'{"Updated" if pk else "Added"}.'
elif text_type == 'path':
return redirect('dashboard:data-edit', pk=pk) if pk else redirect('dashboard:data-add')