﻿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
30698	`BaseDetailView` and `SingleObjectMixin` optimization.	Davit Gachechiladze	Davit Gachechiladze	"Hi. In `BaseDetailView.get(self, request, *args, **kwargs)`, we have line like `context = self.get_context_data(object=self.object)`. Why should we pass `object=self.object` ? It's redundant (IMHO).

{{{#!python
class SingleObjectMixin(ContextMixin):

    def get_context_data(self, **kwargs):
        """"""Insert the single object into the context dict.""""""
        context = {}
        if self.object:
            context['object'] = self.object
            context_object_name = self.get_context_object_name(self.object)
            if context_object_name:
                context[context_object_name] = self.object
        context.update(kwargs)
        return super().get_context_data(**context)
}}}

{{{#!python
class BaseDetailView(SingleObjectMixin, View):
    """"""A base view for displaying a single object.""""""
    def get(self, request, *args, **kwargs):
        self.object = self.get_object()
        context = self.get_context_data(object=self.object)
        return self.render_to_response(context)
}}}

I think, it's better idea to implement `SingleObjectMixin.get_context_data(self, **kwargs)` and `BaseDetailView.get(self, request, *args, **kwargs)` like this. Code below

{{{#!python
class SingleObjectMixin(ContextMixin):
    def get_context_data(self, *, object=None, **kwargs):
        """"""Insert the single object into the context dict.""""""
        object = object if object is not None else self.object
        context = {}
        if object:
            context['object'] = object
            context_object_name = self.get_context_object_name(object)
            if context_object_name:
                context[context_object_name] = object
        context.update(kwargs)
        return super().get_context_data(**context)
}}}

{{{#!python
class BaseDetailView(SingleObjectMixin, View):
    """"""A base view for displaying a single object.""""""
    def get(self, request, *args, **kwargs):
        self.object = self.get_object()
        context = self.get_context_data()
        return self.render_to_response(context)
}}}

Also, `SingleObjectMixin.get_context_data(self, *, object=None, **kwargs)` will be implemented in a same fashion as `MultipleObjectMixin.get_context_data(self, *, object_list=None, **kwargs)` is this moment.

[https://github.com/django/django/pull/11656]"	Cleanup/optimization	assigned	Generic views	master	Normal				Unreviewed	1	0	0	0	0	0
