Django Admin - 按自定义方法排序

发布于 2024-10-03 13:10:33 字数 533 浏览 2 评论 0原文

我知道如果您有一些聚合,可以使用注释来完成,但我无法基于自定义方法来实现它。下面是我的模型的代码,我希望能够按 _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')

I know that it can to be done with annotate if you have some aggregation, but I was not able to implement it based on custom method. Bellow is the code for my model, and i want to be able to sort the results by _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')

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

雨夜星沙 2024-10-10 13:10:34

出于性能考虑,Django admin 仅根据数据库查询进行排序。

因此,为了对带注释的字段进行排序,您必须使用带注释的字段覆盖django.contrib.admin.ModelAdmin.get_queryset,并将字段名称包含在class Meta 作为 Model 上的 order_by

Django admin does sorting based on db queries only, for performance sake.

So, in order to sort on a annotated field, you have to override the django.contrib.admin.ModelAdmin.get_queryset with your annotated field and include that field name in the class Meta as oder_by on the Model.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文