def batch_modify(request, ids, model): if not request.user.is_superuser: raise PermissionDenied if model == 'Document': Resource = Document if model == 'Layer': Resource = Layer if model == 'Map': Resource = Map template = 'base/batch_edit.html' if "cancel" in request.POST: return HttpResponseRedirect( '/admin/{model}s/{model}/'.format(model=model.lower()) ) if request.method == 'POST': form = BatchEditForm(request.POST) if form.is_valid(): for resource in Resource.objects.filter(id__in=ids.split(',')): resource.group = form.cleaned_data['group'] or resource.group resource.owner = form.cleaned_data['owner'] or resource.owner resource.category = form.cleaned_data['category'] or resource.category resource.license = form.cleaned_data['license'] or resource.license resource.date = form.cleaned_data['date'] or resource.date resource.language = form.cleaned_data['language'] or resource.language new_region = form.cleaned_data['regions'] if new_region: resource.regions.add(new_region) keywords = form.cleaned_data['keywords'] if keywords: resource.keywords.clear() for word in keywords.split(','): resource.keywords.add(word.strip()) resource.save(notify=True) return HttpResponseRedirect( '/admin/{model}s/{model}/'.format(model=model.lower()) ) return render( request, template, context={ 'form': form, 'ids': ids, 'model': model, } ) form = BatchEditForm() return render( request, template, context={ 'form': form, 'ids': ids, 'model': model, } )
def metadata_batch_edit(modeladmin, request, queryset): ids = ','.join(str(element.pk) for element in queryset) resource = queryset[0].class_name.lower() form = BatchEditForm({ 'ids': ids }) name_space_mapper = { 'dataset': 'dataset_batch_metadata', 'map': 'map_batch_metadata', 'document': 'document_batch_metadata' } try: name_space = name_space_mapper[resource] except KeyError: name_space = None return render( request, "base/batch_edit.html", context={ 'form': form, 'ids': ids, 'model': resource, 'name_space': name_space } )
def batch_modify(request, model): if not request.user.is_superuser: raise PermissionDenied if model == 'Document': Resource = Document if model == 'Layer': Resource = Layer if model == 'Map': Resource = Map template = 'base/batch_edit.html' ids = request.POST.get("ids") if "cancel" in request.POST or not ids: return HttpResponseRedirect( f'/admin/{model.lower()}s/{model.lower()}/') if request.method == 'POST': form = BatchEditForm(request.POST) if form.is_valid(): keywords = [ keyword.strip() for keyword in form.cleaned_data.pop("keywords").split(',') if keyword ] regions = form.cleaned_data.pop("regions") ids = form.cleaned_data.pop("ids") if not form.cleaned_data.get("date"): form.cleaned_data.pop("date") to_update = {} for _key, _value in form.cleaned_data.items(): if _value: to_update[_key] = _value resources = Resource.objects.filter(id__in=ids.split(',')) resources.update(**to_update) if regions: regions_through = Resource.regions.through new_regions = [ regions_through(region=regions, resourcebase=resource) for resource in resources ] regions_through.objects.bulk_create(new_regions, ignore_conflicts=True) if keywords: keywords_through = Resource.keywords.through keywords_through.objects.filter( content_object__in=resources).delete() def get_or_create(keyword): try: return HierarchicalKeyword.objects.get(name=keyword) except HierarchicalKeyword.DoesNotExist: return HierarchicalKeyword.add_root(name=keyword) hierarchical_keyword = [ get_or_create(keyword) for keyword in keywords ] new_keywords = [] for keyword in hierarchical_keyword: new_keywords += [ keywords_through(content_object=resource, tag_id=keyword.pk) for resource in resources ] keywords_through.objects.bulk_create(new_keywords, ignore_conflicts=True) return HttpResponseRedirect( f'/admin/{model.lower()}s/{model.lower()}/') return render(request, template, context={ 'form': form, 'ids': ids, 'model': model, }) form = BatchEditForm() return render(request, template, context={ 'form': form, 'ids': ids, 'model': model, })