id summary reporter owner description type status component version severity resolution keywords cc stage has_patch needs_docs needs_tests needs_better_patch easy ui_ux 10742 ModelAdmin.list_select_related needs three-valued logic to support custom select_related() calls mrts nobody "If any of the related fields in a model is nullable, e.g. {{{ class C(Base): a = models.ForeignKey(A, blank=True, null=True) b = models.ForeignKey(B) is_published = models.BooleanField() }}} , `select_related()` does not pull them in by default (see http://docs.djangoproject.com/en/dev/ref/models/querysets/#select-related). Forcing it explicitly as follows {{{ class CAdmin(admin.ModelAdmin): list_display = ('name', 'a', 'b', 'is_published') list_select_related = None def queryset(self, request): qs = super(CAdmin, self).queryset(request) return qs.select_related('a', 'b') }}} has no effect, as `ChangeList.get_query_set()` blindly overrides it with a plain `select_related()` (see [source:django/trunk/django/contrib/admin/views/main.py@10407#L201]). To get the desired behviour of pulling in the nullable relations in a single query, three-valued logic is required for `ModelAdmin.list_select_related`: * `True` -- always call `select_related()`, * `False` (the default) -- call `select_related()` if any of the fields in `list_display` is a foreign key, * `None` (added) -- leave the queryset alone. Patch attached. See also #10722 and http://groups.google.com/group/django-developers/browse_thread/thread/e1762a77979f7cbe ." closed contrib.admin dev duplicate efficient-admin Unreviewed 1 1 1 1 0 0