Ticket #2884: get_query_set.patch
File get_query_set.patch, 2.1 KB (added by , 18 years ago) |
---|
-
django/contrib/admin/views/main.py
669 669 return order_field, order_type 670 670 671 671 def get_query_set(self): 672 def follow_fkey_ordering(field, fields_seen = None): 673 fields_seen = fields_seen or [] 674 related_object = field.rel.to 675 ordering = related_object._meta.ordering 676 if ordering: 677 ordering_field = related_object._meta.get_field(ordering[0]) 678 if isinstance(ordering_field.rel, models.ManyToOneRel) and not (field in fields_seen): 679 fields_seen.append(field) 680 rel_table, rel_ordering = follow_fkey_ordering(ordering_field, fields_seen) 681 else: 682 rel_ordering = ordering_field.column 683 rel_table = related_object._meta.db_table 684 else: 685 rel_ordering = related_object._meta.pk.column 686 rel_table = related_object._meta.db_table 687 return rel_table, rel_ordering 688 672 689 qs = self.manager.get_query_set() 673 690 lookup_params = self.params.copy() # a dictionary of the query string 674 691 for i in (ALL_VAR, ORDER_VAR, ORDER_TYPE_VAR, SEARCH_VAR, IS_POPUP_VAR): … … 706 723 # For OneToOneFields, don't try to order by the related object's ordering criteria. 707 724 pass 708 725 elif isinstance(f.rel, models.ManyToOneRel): 709 rel_ordering = f.rel.to._meta.ordering and f.rel.to._meta.ordering[0] or f.rel.to._meta.pk.column 710 lookup_order_field = '%s.%s' % (f.rel.to._meta.db_table, rel_ordering) 726 #Recursively follows ForeignKey fields to get the correct table name and field for order_by. 727 ordering_table, ordering_field = follow_fkey_ordering(f) 728 lookup_order_field = '%s.%s' % (ordering_table, ordering_field) 711 729 712 730 # Set ordering. 713 731 qs = qs.order_by((self.order_type == 'desc' and '-' or '') + lookup_order_field)