Opened 13 years ago

Closed 12 years ago

#15221 closed Bug (fixed)

Show field's verbose name instead of related model name for M2M filterspecs

Reported by: Julien Phalip Owned by: nobody
Component: contrib.admin Version: 1.2
Severity: Normal Keywords:
Cc: Simon Charette Triage Stage: Accepted
Has patch: yes Needs documentation: no
Needs tests: no Patch needs improvement: yes
Easy pickings: no UI/UX: yes

Description

Consider the following example:

Model:

from django.db import models
from django.contrib.auth.models import User

class Book(models.Model):
    title = models.CharField(max_length=25)
    year = models.PositiveIntegerField(null=True, blank=True)
    author = models.ForeignKey(User, related_name='books_authored', blank=True, null=True)
    contributors = models.ManyToManyField(User, related_name='books_contributed', blank=True, null=True)

Admin:

from django.contrib import admin

from .models import Book

class BookAdmin(admin.ModelAdmin):
    list_display = ('title', 'year', 'author')
    list_filter = ('year', 'author', 'contributors')
    
admin.site.register(Book, BookAdmin)

Presumably since #3400 was fixed, M2M filterspecs are using the related model's name as title. This leads the example above to display "By user" instead of "By contributors". This is a bit silly in itself but it could be even more problematic if multiple M2M filters to User were specified at the same time.

I've discussed this with DrMeers (who wrote the patch for #3400). The patch I'm attaching seems to fix the issue but we might have to investigate a bit more to see if there are cases where it wouldn't make sense to show the field's verbose name for a M2M.

The patch doesn't contain tests yet. I'm waiting to get feedback on the latest patch I've posted in #8528 which introduces a new module for filterspecs' tests. If #8529 gets checked in then writing tests for this patch will be trivial.

Attachments (3)

15221_m2m_filterspec_title.diff (1.1 KB ) - added by Julien Phalip 13 years ago.
15221_m2m_filterspec_title.2.diff (4.3 KB ) - added by Julien Phalip 13 years ago.
Patch + tests
15221_m2m_filterspec_title.3.diff (5.0 KB ) - added by dmclain 13 years ago.
updated patch to match up against trunk

Download all attachments as: .zip

Change History (16)

by Julien Phalip, 13 years ago

comment:1 by anonymous, 13 years ago

Triage Stage: UnreviewedAccepted

Yes, this problem exists, but no, it isn't related (directly) #3400 specific -- the same problem exists in 1.2.X.

comment:2 by anonymous, 13 years ago

Needs tests: set

comment:3 by Russell Keith-Magee, 13 years ago

Oops - that was me.

by Julien Phalip, 13 years ago

Patch + tests

comment:4 by Julien Phalip, 13 years ago

Needs tests: unset

Here's to hoping it makes the 1.3 cut :-)

comment:5 by Simon Charette, 13 years ago

Cc: Simon Charette added

comment:6 by Łukasz Rekucki, 13 years ago

Severity: Normal
Type: Bug

comment:7 by patchhammer, 13 years ago

Easy pickings: unset
Patch needs improvement: set

15221_m2m_filterspec_title.2.diff fails to apply cleanly on to trunk

by dmclain, 13 years ago

updated patch to match up against trunk

comment:8 by Julien Phalip, 13 years ago

Oh, you beat me to it. Thanks for updating the patch! ;-)

So yeah, this is related to #15971.

comment:9 by Julien Phalip, 13 years ago

UI/UX: set

comment:10 by Julien Phalip, 13 years ago

#16711 is a dupe.

comment:11 by anonymous, 13 years ago

Here is a workaround to this problem:

http://stackoverflow.com/questions/7199922/django-admin-filter-verbose-name-on-listing-page/

I hope that can be useful to someone.

comment:12 by Jacob, 12 years ago

milestone: 1.3

Milestone 1.3 deleted

comment:11 by Julien Phalip, 12 years ago

Resolution: fixed
Status: newclosed

In [16991]:

Fixed #15221 -- Made the admin filters on foreign key and m2m relationships display the related field's verbose name instead of that of the related model.

Note: See TracTickets for help on using tickets.
Back to Top