You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

67 lines
2.5 KiB

from django.http import JsonResponse
from django.core.exceptions import PermissionDenied
class DropUploadAdminMixin:
class Media:
css = {"all": ("media_archive/css/admin_file_drop.css",)}
js = (
"media_archive/js/admin_file_drop.js",
)
def get_urls(self):
from django.conf.urls import url
return [
url(
r"^upload/$",
self.admin_site.admin_view(self.upload),
name="media_archive_upload",
)
] + super().get_urls()
def upload(self, request):
# We must initialize a fake-ChangeList to be able to get the currently
# selected categories.
# Code copied from django.contrib.admin.options.ModelAdmin.changelist_view
if not self.has_change_permission(request, None):
raise PermissionDenied
list_display = self.get_list_display(request)
list_display_links = self.get_list_display_links(request, list_display)
list_filter = self.get_list_filter(request)
search_fields = self.get_search_fields(request)
list_select_related = self.get_list_select_related(request)
# Check actions to see if any are available on this changelist
actions = self.get_actions(request)
if actions:
# Add the action checkboxes if there are any actions available.
list_display = ['action_checkbox'] + list(list_display)
ChangeList = self.get_changelist(request)
changelist = ChangeList(
request, self.model, list_display,
list_display_links, list_filter, self.date_hierarchy,
search_fields, list_select_related, self.list_per_page,
self.list_max_show_all, self.list_editable, self,
)
# Put uploaded file in selected categories
if changelist.result_list:
filtered_categories = changelist.result_list.first().categories.all()
elif 'categories__exact' in changelist.params:
from .models import MediaCategory
filtered_categories = MediaCategory.objects.filter(
categories__exact=int(changelist.params['categories__exact']))
else:
filtered_categories = None
f = self.model()
f.file = request.FILES["file"]
f.save()
if filtered_categories:
for cat in filtered_categories:
f.categories.add(cat)
return JsonResponse({"success": True})