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)