def add_view()

in src/olympia/blocklist/admin.py [0:0]


    def add_view(self, request, **kwargs):
        if not self.has_add_permission(request):
            raise PermissionDenied

        MultiBlockForm = self.get_form(request, change=False, **kwargs)
        action = int(
            self.get_value(
                'action',
                request,
                obj=None,
                default=BlocklistSubmission.ACTIONS.ADDCHANGE,
            )
        )
        guids_data = self.get_value('guids', request)
        if guids_data and 'input_guids' not in request.POST:
            # If we get a guids param it's a redirect from input_guids_view.
            initial = {
                key: value
                for key, value in request.GET.items()
                if key not in ('v', 'guids')
            }
            if version_ids := request.GET.getlist('v'):
                # `v` can contain multiple version ids
                try:
                    initial['changed_version_ids'] = [int(v) for v in version_ids]
                except ValueError:
                    pass
            initial.update(**{'input_guids': guids_data})
            if 'action' in request.POST:
                initial['action'] = request.POST['action']
            form = MultiBlockForm(initial=initial)
        elif request.method == 'POST':
            # Otherwise, if its a POST try to process the form.
            form = MultiBlockForm(request.POST)
            if form.is_valid():
                # Save the object so we have the guids
                obj = form.save(commit=False)
                obj.updated_by = request.user
                self.save_model(request, obj, form, change=False)
                self.log_addition(request, obj, [{'added': {}}])
                return self.response_add(request, obj)
            else:
                guids_data = request.POST.get('input_guids')
        else:
            # if its not a POST and no ?guids there's nothing to do so go back
            return redirect('admin:blocklist_block_add')

        fieldsets = self.get_fieldsets(request, None)
        admin_form = admin.helpers.AdminForm(
            form,
            list(fieldsets),
            self.get_prepopulated_fields(request, None),
            self.get_readonly_fields(request, None),
            model_admin=self,
        )
        context = {
            # standard context django admin expects
            'title': BlocklistSubmission(action=action).get_action_display(),
            'subtitle': None,
            'adminform': admin_form,
            'object_id': None,
            'original': None,
            'is_popup': False,
            'to_field': None,
            'media': self.media + admin_form.media,
            'inline_admin_formsets': [],
            'errors': admin.helpers.AdminErrorList(form, []),
            'preserved_filters': self.get_preserved_filters(request),
            # extra context we use in our custom template
            'block_history': self.block_history(self.model(input_guids=guids_data)),
            'submission_published': False,
        }
        return self.render_change_form(request, context, add=True)