Code

Opened 3 years ago

Closed 3 years ago

Last modified 3 years ago

#14878 closed (fixed)

Issues in generic views (list)

Reported by: diegueus9 Owned by: nobody
Component: Generic views Version: 1.3-alpha
Severity: Keywords:
Cc: camilo.nova@… Triage Stage: Accepted
Has patch: yes Needs documentation: no
Needs tests: yes Patch needs improvement: yes
Easy pickings: UI/UX:

Description

The code in http://code.djangoproject.com/browser/django/trunk/django/views/generic/list.py have a 'wrong' behavior

    def get_context_object_name(self, object_list):
        """
        Get the name of the item to be used in the context.
        """
        if self.context_object_name:
            return self.context_object_name
        elif hasattr(object_list, 'model'):
            return smart_str(object_list.model._meta.verbose_name_plural)
        else:
            return None

    def get_context_data(self, **kwargs):
        """
        Get the context for this view.
        """
        queryset = kwargs.pop('object_list')
        page_size = self.get_paginate_by(queryset)
        if page_size:
            paginator, page, queryset, is_paginated = self.paginate_queryset(queryset, page_size)
            context = {
                'paginator': paginator,
                'page_obj': page,
                'is_paginated': is_paginated,
                'object_list': queryset
            }
        else:
            context = {
                'paginator': None,
                'page_obj': None,
                'is_paginated': False,
                'object_list': queryset
            }
        context.update(kwargs)
        context_object_name = self.get_context_object_name(queryset)
        if context_object_name is not None:
            context[context_object_name] = queryset
        return context
  • The method get_context_object_name take the verbose_name_plural of the models which could contains spaces or be a translated string
  • The generated context_object_name don't ends in '_list' and could be a backward compatibility problem
  • In the documentation of Class-Based Generic Views dont talk about the context will have a variable from the models name
  • The context result contains twice the queryset, first in 'objects_list' and second in the new dinamic generated and if the user/developer want to serialize the data to json or cvs or xml in a generic way, i mean write something like a JSONResponseMixin the data will have duplicate queryset, that don't looks right

Attachments (1)

generic.diff (1.5 KB) - added by diegueus9 3 years ago.
Better Patch

Download all attachments as: .zip

Change History (9)

Changed 3 years ago by diegueus9

Better Patch

comment:1 Changed 3 years ago by diegueus9

  • Has patch set
  • Needs documentation unset
  • Needs tests unset
  • Patch needs improvement unset

comment:2 Changed 3 years ago by diegueus9

  • Patch needs improvement set

comment:4 Changed 3 years ago by camilonova

  • Cc camilo.nova@… added

comment:5 Changed 3 years ago by russellm

  • Needs tests set
  • Triage Stage changed from Unreviewed to Accepted

comment:6 Changed 3 years ago by russellm

To address the points specifically:

  1. The usage of verbose_name is a problem; it's addressed in detail.py, but not in list.py, and neither case is tested.
  2. There are no backwards compatibility concerns, because this is new API. The _list suffix was dropped because if you're manually specifying a name, you should have full control.
  3. The use of verbose_name based context variables is mentioned in the reference docs, but not the topic guide. This is an omission that should be corrected.
  4. Retaining object_list is an intentional design decision -- it ensures you can always use a generic template.


comment:7 Changed 3 years ago by russellm

  • Resolution set to fixed
  • Status changed from new to closed

(In [15133]) Fixed #14878 -- Clarified the way verbose_name_plural is used in generic list views as a context variable. Thanks to diegueus9 for the report.

comment:8 Changed 3 years ago by jacob

  • milestone 1.3 deleted

Milestone 1.3 deleted

Add Comment

Modify Ticket

Change Properties
<Author field>
Action
as closed
as The resolution will be set. Next status will be 'closed'
The resolution will be deleted. Next status will be 'new'
Author


E-mail address and user name can be saved in the Preferences.

 
Note: See TracTickets for help on using tickets.