Skip to content

admin.SimpleListFilter not working on SortableAdmin #242

Open
@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

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions