Skip to content

admin.SimpleListFilter not working on SortableAdmin #242

@ChrisCrossCrash

Description

@ChrisCrossCrash

I'm having some trouble getting the Django Admin's SimpleListFilter to work with SortableAdmin.

I've created a simple models.py and admin.py to demonstrate this.

The error happens when a user clicks on "Past" or "Upcoming" to filter the dates while they are on the "Sortable date" list page.

models.py:

from django.db import models
from adminsortable.models import SortableMixin


class SortableDate(SortableMixin):
    date = models.DateField()
    order = models.IntegerField(editable=False, db_index=True)

    class Meta:
        ordering = ('order',)

    def __str__(self):
        return self.date.strftime("%d-%b-%Y")


class NonSortableDate(models.Model):
    date = models.DateField()

    def __str__(self):
        return self.date.strftime("%d-%b-%Y")

admin.py

from django.contrib import admin
from adminsortable.admin import SortableAdmin
from .models import SortableDate, NonSortableDate
from django.utils import timezone


class ClassOptionDateFilter(admin.SimpleListFilter):
    title = 'date'
    parameter_name = 'relative_date'

    def lookups(self, request, model_admin):
        return (
            ('past', 'Past'),
            ('upcoming', 'Upcoming'),
        )

    def queryset(self, request, queryset):
        today = timezone.now().date()
        if self.value() == 'past':
            return queryset.filter(date__lte=today)
        if self.value() == 'upcoming':
            return queryset.filter(date__gt=today)


@admin.register(SortableDate)
class SortableDateAdmin(SortableAdmin):
    # Applying a list filter on this causes this error:
    # "FieldError at /admin/core/sortabledate/"
    # "Cannot resolve keyword 'is_upcoming' into field. Choices are: date, id, order"
    list_filter = (ClassOptionDateFilter,)


@admin.register(NonSortableDate)
class NonSortableDateAdmin(admin.ModelAdmin):
    # This works fine because it's in a normal ModelAdmin
    list_filter = (ClassOptionDateFilter,)

is SortableAdmin just not meant to be compatible with SimpleListFilter?

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions