Determine the HttpResponse for the add_view stage.
(self, request, obj, post_url_continue=None)
| 1548 | return parse_qsl(query_string.replace(preserved_filters, "")) |
| 1549 | |
| 1550 | def response_add(self, request, obj, post_url_continue=None): |
| 1551 | """ |
| 1552 | Determine the HttpResponse for the add_view stage. |
| 1553 | """ |
| 1554 | opts = obj._meta |
| 1555 | preserved_filters = self.get_preserved_filters(request) |
| 1556 | preserved_qsl = self._get_preserved_qsl(request, preserved_filters) |
| 1557 | obj_url = reverse( |
| 1558 | "admin:%s_%s_change" % (opts.app_label, opts.model_name), |
| 1559 | args=(quote(obj.pk),), |
| 1560 | current_app=self.admin_site.name, |
| 1561 | ) |
| 1562 | # Add a link to the object's change form if the user can edit the obj. |
| 1563 | obj_display = display_for_value(str(obj), EMPTY_VALUE_STRING) |
| 1564 | if self.has_change_permission(request, obj): |
| 1565 | obj_repr = format_html( |
| 1566 | '<a href="{}">{}</a>', urlquote(obj_url), obj_display |
| 1567 | ) |
| 1568 | else: |
| 1569 | obj_repr = obj_display |
| 1570 | msg_dict = { |
| 1571 | "name": opts.verbose_name, |
| 1572 | "obj": obj_repr, |
| 1573 | } |
| 1574 | # Here, we distinguish between different save types by checking for |
| 1575 | # the presence of keys in request.POST. |
| 1576 | |
| 1577 | if IS_POPUP_VAR in request.POST: |
| 1578 | to_field = request.POST.get(TO_FIELD_VAR) |
| 1579 | if to_field: |
| 1580 | attr = str(to_field) |
| 1581 | else: |
| 1582 | attr = obj._meta.pk.attname |
| 1583 | value = obj.serializable_value(attr) |
| 1584 | popup_response = { |
| 1585 | "value": str(value), |
| 1586 | "obj": str(obj), |
| 1587 | } |
| 1588 | |
| 1589 | # Find the optgroup for the new item, if available |
| 1590 | source_model_name = request.POST.get(SOURCE_MODEL_VAR) |
| 1591 | source_admin = None |
| 1592 | if source_model_name: |
| 1593 | app_label, model_name = source_model_name.split(".", 1) |
| 1594 | try: |
| 1595 | source_model = apps.get_model(app_label, model_name) |
| 1596 | except LookupError: |
| 1597 | msg = _('The app "%s" could not be found.') % source_model_name |
| 1598 | self.message_user(request, msg, messages.ERROR) |
| 1599 | else: |
| 1600 | source_admin = self.admin_site._registry.get(source_model) |
| 1601 | |
| 1602 | if source_admin: |
| 1603 | form = source_admin.get_form(request)() |
| 1604 | if self.opts.verbose_name_plural in form.fields: |
| 1605 | field = form.fields[self.opts.verbose_name_plural] |
| 1606 | for option_value, option_label in field.choices: |
| 1607 | # Check if this is an optgroup (label is a sequence |
no test coverage detected