本講中,咱們會講到評論管理功能,數據庫中的每一條是來自用戶的評價,所以後臺中的評論管理只有評論列表和評論刪除功能,沒有增長評論和編輯評論。html
照例咱們先添加評論管理的相關路由ajax
path('comment_list/', views.CommentListView.as_view(), name='comment_list'),
path('comment_delete/', views.comment_delete, name='comment_delete'),
複製代碼
首先是評論列表的展現,咱們經過CommentListView視圖類來實現,該類依然是繼承ListView來實現的。代碼以下數據庫
class CommentListView(AdminUserRequiredMixin, generic.ListView):
model = Comment
template_name = 'myadmin/comment_list.html'
context_object_name = 'comment_list'
paginate_by = 10
q = ''
def get_context_data(self, *, object_list=None, **kwargs):
context = super(CommentListView, self).get_context_data(**kwargs)
paginator = context.get('paginator')
page = context.get('page_obj')
page_list = get_page_list(paginator, page)
context['page_list'] = page_list
context['q'] = self.q
return context
def get_queryset(self):
self.q = self.request.GET.get("q", "")
return Comment.objects.filter(content__contains=self.q).order_by('-timestamp')
複製代碼
經過繼承ListView來實現評論列表的展現,經過get_context_data()來實現分頁功能,經過get_queryset()來實現搜索功能。api
效果以下 bash
下面咱們繼續實現刪除功能,該功能比較簡單,只須要經過ajax將video_id傳給刪除接口便可,ajax的代碼位於static/js/myadmin/comment_list.js,刪除評論的接口是api_comment_delete,最終會調用到comment_delete,代碼以下ide
@ajax_required
@require_http_methods(["POST"])
def comment_delete(request):
comment_id = request.POST['comment_id']
instance = Comment.objects.get(id=comment_id)
instance.delete()
return JsonResponse({"code": 0, "msg": "success"})
複製代碼
邏輯還算清晰,即先拿到評論的id,而後獲取到該條評論,最後instance.delete()刪除之。ui