Пример #1
0
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,
        }
    )
Пример #2
0
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
        }
    )
Пример #3
0
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,
                  })