Django Admin - сортировка по пользовательскому методу - PullRequest
3 голосов
/ 22 ноября 2010

Я знаю, что это можно сделать с помощью аннотирования, если у вас есть некоторая агрегация, но я не смог реализовать ее на основе пользовательского метода. Ниже приведен код моей модели, и я хочу иметь возможность сортировать результаты по _is_registered.

class Subscribers(models.Model):
    email = models.EmailField(_('E-mail'))
    want_newsletter = models.BooleanField(default = False)

    def get_user(self):
        user = User.objects.filter(email= self.email)
        if user.count()>0:
            return user[0]
        return None

    def _is_registered(self):
        user = self.get_user()
        if user:
            return _('Yes')
        return _('No')

1 Ответ

1 голос
/ 22 ноября 2010

Администратор Django выполняет сортировку только по запросам БД, для повышения производительности.

Таким образом, для сортировки по аннотированному полю необходимо переопределить django.contrib.admin.ModelAdmin.get_queryset аннотированным полем и включить это имя поля в class Meta как oder_by в Model.

...