Я использую Django 2.0
У меня есть класс моделей с пользовательским менеджером в models.py
class MockTestQuerySet(models.query.QuerySet):
def upcoming(self):
return self.filter(start_date__gte=datetime.now())
def past(self):
return self.filter(end_date__lte=datetime.now())
class MockTestManager(models.Manager):
def get_queryset(self):
return MockTestQuerySet(self.model, self._db)
def upcoming_tests(self):
return self.get_queryset().upcoming()
def past_tests(self):
return self.get_queryset().past()
def is_past(self, mock_pk):
mock_test = self.get_queryset().past().filter(pk=mock_pk).first()
if mock_test is not None:
return True
return False
def is_future(self, mock_pk):
mock_test = self.get_queryset().upcoming().filter(pk=mock_pk).first()
if mock_test is not None:
return True
return False
class MockTest(models.Model):
title = models.CharField(max_length=250, null=False, blank=False)
start_date = models.DateTimeField()
end_date = models.DateTimeField()
modified = models.DateTimeField(auto_now=True)
created = models.DateTimeField(auto_now_add=True)
objects = MockTestManager()
class Meta:
db_table = 'mock_tests'
ordering = ['start_date']
Теперь я работаю над модулем администратора и хочу создать фильтр, который фильтрует предстоящие или прошедшие тесты, вызывая past_tests()
или upcoming_tests()
До сих пор я пробовал это в admin.py
class InPast(admin.SimpleListFilter):
def lookups(self, request, model_admin):
pass
title = _('Past Mock Tests')
parameter_name = 'past'
def queryset(self, request, queryset):
return queryset.past_tests()
@admin.register(MockTest)
class MockTestAdmin(admin.ModelAdmin):
list_display = ['title', 'start_date', 'end_date', 'duration']
list_filter = [
InPast
]
Я знаю, я делаю это неправильно, но не могу понять, как это сделать.