generated from Code-Institute-Org/gitpod-full-template
-
Notifications
You must be signed in to change notification settings - Fork 4
/
Copy path04-questions-views.txt
132 lines (105 loc) · 4.03 KB
/
04-questions-views.txt
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
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
Check results
=============
Code
=============
"""
views for home app
"""
# pylint: disable=no-member
from django.shortcuts import render, redirect, reverse, get_object_or_404
from django.views import generic, View # noqa # pylint: disable=unused-import
from django.views.generic.edit import CreateView # noqa # pylint: disable=unused-import
from django.contrib import messages
from django.contrib.auth.decorators import login_required
from .models import Question
from .forms import QuestionForm
class QuestionsList(generic.ListView):
"""
view to display all questions paginated
"""
model = Question
queryset = Question.objects.filter(status=1).order_by('-created_on')
template_name = 'questions/questions.html'
paginate_by = 10
@login_required
def questions_manager(request):
"""
view to display all unpublished questions
"""
if not request.user.is_superuser:
messages.error(request, 'Sorry, only the store owners can do that.')
return redirect(reverse('questions'))
question_list = Question.objects.filter(status=0).order_by('-created_on')
template = 'questions/questions.html'
context = {
'question_list': question_list,
}
return render(request, template, context)
@login_required
def add_question(request):
"""
Add questions to FAQ page
"""
if request.method == 'POST':
form = QuestionForm(request.POST, request.FILES)
if form.is_valid():
form.save(commit=False)
new_question = form.save()
# change status to draft to make sure that the form
# has not been tampered with before form submitted in front end
new_question.status = 0
new_question.save(update_fields=['status'])
messages.success(request, 'Successfully added your question!\
Response will be published within 2 working days')
return redirect(reverse('questions'))
else:
form = QuestionForm()
messages.error(request, 'Failed to add question.\
Please ensure the form is valid')
template = 'questions/add_question.html'
context = {
'form': form,
}
return render(request, template, context)
else:
form = QuestionForm()
template = 'questions/add_question.html'
context = {
'form': form,
}
return render(request, template, context)
@login_required
def edit_question(request, question_id):
""" Edit a question posted in FAQ """
if not request.user.is_superuser:
messages.error(request, 'Sorry, only the store owners can do that.')
return redirect(reverse('questions'))
question = get_object_or_404(Question, pk=question_id)
if request.method == 'POST':
form = QuestionForm(request.POST, request.FILES, instance=question)
if form.is_valid():
form.save()
messages.success(request, 'Successfully saved the question!')
return redirect(reverse('questions_manager'))
else:
messages.error(request, 'Failed to update product.\
Please ensure the form is valid.')
else:
form = QuestionForm(instance=question)
messages.info(request, f'You are editing {question.header}')
template = 'questions/edit_question.html'
context = {
'form': form,
'question': question,
}
return render(request, template, context)
@login_required
def delete_question(request, question_id):
""" Delete a question from the FAQ """
if not request.user.is_superuser:
messages.error(request, 'Sorry, only the store owners can do that.')
return redirect(reverse('home'))
question = get_object_or_404(Question, pk=question_id)
question.delete()
messages.success(request, 'Question deleted!')
return redirect(reverse('questions'))