mirror of
				https://github.com/django/django.git
				synced 2025-10-31 09:41:08 +00:00 
			
		
		
		
	Added meta.Admin list_select_related option, which specifies to use select_related in the change-list query
git-svn-id: http://code.djangoproject.com/svn/django/trunk@1092 bcc190cf-cafb-0310-a4f2-bffc1f526a37
This commit is contained in:
		| @@ -135,17 +135,20 @@ def change_list(request, app_label, module_name): | |||||||
|         f = lookup_opts.get_field(order_field) |         f = lookup_opts.get_field(order_field) | ||||||
|         rel_ordering = f.rel.to.ordering and f.rel.to.ordering[0] or f.rel.to.pk.column |         rel_ordering = f.rel.to.ordering and f.rel.to.ordering[0] or f.rel.to.pk.column | ||||||
|         lookup_order_field = '%s.%s' % (f.rel.to.db_table, rel_ordering) |         lookup_order_field = '%s.%s' % (f.rel.to.db_table, rel_ordering) | ||||||
|     # Use select_related if one of the list_display options is a field with a |     if lookup_opts.admin.list_select_related: | ||||||
|     # relationship. |         lookup_params['select_related'] = True | ||||||
|     for field_name in lookup_opts.admin.list_display: |     else: | ||||||
|         try: |         # Use select_related if one of the list_display options is a field with | ||||||
|             f = lookup_opts.get_field(field_name) |         # a relationship. | ||||||
|         except meta.FieldDoesNotExist: |         for field_name in lookup_opts.admin.list_display: | ||||||
|             pass |             try: | ||||||
|         else: |                 f = lookup_opts.get_field(field_name) | ||||||
|             if isinstance(f.rel, meta.ManyToOne): |             except meta.FieldDoesNotExist: | ||||||
|                 lookup_params['select_related'] = True |                 pass | ||||||
|                 break |             else: | ||||||
|  |                 if isinstance(f.rel, meta.ManyToOne): | ||||||
|  |                     lookup_params['select_related'] = True | ||||||
|  |                     break | ||||||
|     lookup_params['order_by'] = ((order_type == 'desc' and '-' or '') + lookup_order_field,) |     lookup_params['order_by'] = ((order_type == 'desc' and '-' or '') + lookup_order_field,) | ||||||
|     if lookup_opts.admin.search_fields and query: |     if lookup_opts.admin.search_fields and query: | ||||||
|         or_queries = [] |         or_queries = [] | ||||||
|   | |||||||
| @@ -730,7 +730,7 @@ class OneToOne(ManyToOne): | |||||||
|  |  | ||||||
| class Admin: | class Admin: | ||||||
|     def __init__(self, fields=None, js=None, list_display=None, list_filter=None, date_hierarchy=None, |     def __init__(self, fields=None, js=None, list_display=None, list_filter=None, date_hierarchy=None, | ||||||
|         save_as=False, ordering=None, search_fields=None, save_on_top=False): |         save_as=False, ordering=None, search_fields=None, save_on_top=False, list_select_related=False): | ||||||
|         self.fields = fields |         self.fields = fields | ||||||
|         self.js = js or [] |         self.js = js or [] | ||||||
|         self.list_display = list_display or ['__repr__'] |         self.list_display = list_display or ['__repr__'] | ||||||
| @@ -739,6 +739,7 @@ class Admin: | |||||||
|         self.save_as, self.ordering = save_as, ordering |         self.save_as, self.ordering = save_as, ordering | ||||||
|         self.search_fields = search_fields or [] |         self.search_fields = search_fields or [] | ||||||
|         self.save_on_top = save_on_top |         self.save_on_top = save_on_top | ||||||
|  |         self.list_select_related = list_select_related | ||||||
|  |  | ||||||
|     def get_field_objs(self, opts): |     def get_field_objs(self, opts): | ||||||
|         """ |         """ | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user