|
@@ -0,0 +1,78 @@
|
|
|
+from django.contrib import messages
|
|
|
+from django.shortcuts import redirect
|
|
|
+from django.views.generic import View
|
|
|
+from misago.admin import site
|
|
|
+from misago.admin.views import render
|
|
|
+
|
|
|
+
|
|
|
+class AdminBaseMixin(object):
|
|
|
+ """
|
|
|
+ Admin mixin abstraciton used for configuring admin CRUD views.
|
|
|
+
|
|
|
+ Takes following attributes:
|
|
|
+
|
|
|
+ Model = Model instance
|
|
|
+ message_404 = string used in "requested item not found" messages
|
|
|
+ root_link = name of link leading to root action (eg. list of all items
|
|
|
+ template_dir = directory with templates
|
|
|
+ """
|
|
|
+ Model = None
|
|
|
+ message_404 = None
|
|
|
+ root_link = None
|
|
|
+ template_dir = None
|
|
|
+
|
|
|
+ def get_model(self):
|
|
|
+ return self.Model
|
|
|
+
|
|
|
+
|
|
|
+class AdminView(View):
|
|
|
+ def final_template(self):
|
|
|
+ return '%s/%s' % (self.template_dir, self.template)
|
|
|
+
|
|
|
+ def get_target(self, target):
|
|
|
+ Model = self.get_model()
|
|
|
+ return Model.objects.get(id=target)
|
|
|
+
|
|
|
+ def _get_target(self, request, kwargs):
|
|
|
+ """
|
|
|
+ get_target is called by view to fetch item from DB
|
|
|
+ """
|
|
|
+ Model = self.get_model()
|
|
|
+
|
|
|
+ try:
|
|
|
+ return self.get_target(target)
|
|
|
+ except Model.DoesNotExist:
|
|
|
+ messages.error(request, self.message_404)
|
|
|
+ return redirect(self.root_link)
|
|
|
+
|
|
|
+ def render(self, request, context=None):
|
|
|
+ context = context or {}
|
|
|
+ return render(request, self.final_template(), context)
|
|
|
+
|
|
|
+
|
|
|
+class ItemsList(AdminView):
|
|
|
+ template = 'list.html'
|
|
|
+
|
|
|
+ items_per_page = 0
|
|
|
+
|
|
|
+ def dispatch(self, request, *args, **kwargs):
|
|
|
+ context = {}
|
|
|
+
|
|
|
+ context['items'] = self.get_model().objects.all()
|
|
|
+
|
|
|
+ return self.render(request, context)
|
|
|
+
|
|
|
+
|
|
|
+class FormView(AdminView):
|
|
|
+ template = 'form.html'
|
|
|
+
|
|
|
+ def dispatch(self, request, *args, **kwargs):
|
|
|
+ pass
|
|
|
+
|
|
|
+
|
|
|
+class ButtonView(AdminView):
|
|
|
+ def get(self, request, *args, **kwargs):
|
|
|
+ pass
|
|
|
+
|
|
|
+ def post(self, request, *args, **kwargs):
|
|
|
+ pass
|