Ticket #34646: django_ordering.py.diff

File django_ordering.py.diff, 3.8 KB (added by Willem Van Onsem, 18 months ago)

patch file

  • django/contrib/admin/views/main.py

    IDEA additional info:
    Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
    <+>UTF-8
    diff --git a/django/contrib/admin/views/main.py b/django/contrib/admin/views/main.py
    a b  
    316316            ordering = self.lookup_opts.ordering
    317317        return ordering
    318318
    319     def get_ordering_field(self, field_name):
     319    def get_ordering_fields(self, field_name):
    320320        """
    321321        Return the proper model field name corresponding to the given
    322322        field_name to use for ordering. field_name may either be the name of a
     
    361361                try:
    362362                    none, pfx, idx = p.rpartition("-")
    363363                    field_name = self.list_display[int(idx)]
    364                     order_field = self.get_ordering_field(field_name)
    365                     if not order_field:
    366                         continue  # No 'admin_order_field', skip it
    367                     if isinstance(order_field, OrderBy):
    368                         if pfx == "-":
    369                             order_field = order_field.copy()
    370                             order_field.reverse_ordering()
    371                         ordering.append(order_field)
    372                     elif hasattr(order_field, "resolve_expression"):
    373                         # order_field is an expression.
    374                         ordering.append(
    375                             order_field.desc() if pfx == "-" else order_field.asc()
    376                         )
    377                     # reverse order if order_field has already "-" as prefix
    378                     elif order_field.startswith("-") and pfx == "-":
    379                         ordering.append(order_field[1:])
    380                     else:
    381                         ordering.append(pfx + order_field)
     364                    order_fields = self.get_ordering_fields(field_name)
     365                    if not isinstance(order_fields, (list, tuple)):
     366                        order_fields = (order_fields,)
     367                    for order_field in order_fields:
     368                        if not order_field:
     369                            continue  # No 'admin_order_field', skip it
     370                        if isinstance(order_field, OrderBy):
     371                            if pfx == "-":
     372                                order_field = order_field.copy()
     373                                order_field.reverse_ordering()
     374                            ordering.append(order_field)
     375                        elif hasattr(order_field, "resolve_expression"):
     376                            # order_field is an expression.
     377                            ordering.append(
     378                                order_field.desc() if pfx == "-" else order_field.asc()
     379                            )
     380                        # reverse order if order_field has already "-" as prefix
     381                        elif order_field.startswith("-") and pfx == "-":
     382                            ordering.append(order_field[1:])
     383                        else:
     384                            ordering.append(pfx + order_field)
    382385                except (IndexError, ValueError):
    383386                    continue  # Invalid ordering specified, skip it.
    384387
     
    479482                else:
    480483                    order_type = "asc"
    481484                for index, attr in enumerate(self.list_display):
    482                     if self.get_ordering_field(attr) == field:
     485                    if self.get_ordering_fields(attr) == field:
    483486                        ordering_fields[index] = order_type
    484487                        break
    485488        else:
Back to Top