This makes sure the variable can't be printed in the template,
performing an accidental copy of the page. That also happened when using
the `{% print %}` tag from my django-debugtools package
When templates are rendered outside the request cycle,
the `settings` context processor fails because `request.site` is not
created because `SiteMiddleware` was not processed.
This happens whenever requests are mocked for rendering.
For example email rendering by third party packages or unittests
that mock a request object without taking all middleware into account.
A form field with multiple checkboxes may introduce submissions that have more than one value. The `send_email` function would loop through all form fields and grab only the first item of each field, ignoring fields that may have multiple values selected. This is a side effect of using `QueryDict.get()`, which will only return the last value of a list.
This commit fixes that by first converting the `QueryDict` instance to a regular dict of lists so that `get` will return all values, then joining multiple items if needed.
* `result_row_display` adds a `data-object_pk` attribute to each row, to make items easier to identify with JS
* Adds `get_extra_attrs_for_row()` method to `ModelAdmin`, to give developers a way of adding further attributes to the `<tr>` element