首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Django如何通过过滤的一组模型实例获得最大字段值?

Django如何通过过滤的一组模型实例获得最大字段值?
EN

Stack Overflow用户
提问于 2018-07-09 08:46:09
回答 1查看 0关注 0票数 0

我需要一些帮助在我的视图中创建自定义Django查询。我有两个模型,部门和团队,每个部门可以有多个团队。用户可以按任何顺序手动对团队进行排序,一旦完成,每个Team实例上的订单字段都会更新。所以,现在当创建一个新的团队时,我希望获得特定部门中最大的Team.order值。

下面这部分返回所有Team实例Team.objects.filter(department=team.department.id),但是如何从订单字段中获取最大值(除了循环)?

视图

代码语言:javascript
复制
class TeamCreate(LoginRequiredMixin, CreateView):
    model = Team
    form_class = TeamForm
    template_name = 'app/sidebar_team.html'

    # def get_initial(self):
    def get_initial(self):
        pk = self.request.GET.get('id')
        return {
            'department': pk,
        }

    def post(self, request, *args, **kwargs):
        form = TeamForm(request.POST)
        if form.is_valid():
            team = form.save(commit=False)
            team.author = request.user
            team.modified_date = timezone.now()

            # Get max Team.order value, increment by one, and set as new team.order
            max = Team.objects.filter(department=team.department.id).extra(Max('order'))

            team.save()
            return redirect('/dashboard/' + str(team.department.id))

        else:
            return redirect('/dashboard/' + str(form.department.id))
EN

回答 1

Stack Overflow用户

发布于 2018-07-09 18:04:42

如果要将整个项目集合“ 折叠 ”为一个或多个值,则称为.aggregate(..)[django-doc]。所以我们可以编写如下的聚合:

代码语言:javascript
复制
Team.objects.filter(
    department=team.department.id
).aggregate(
    max_order=Max('order')
)['max_order']

.aggregate(..)会执行查询,并返回一个字典的聚集体的结果。由于这里只有一个聚合(作为名称max_order),因此字典包含该元素。因此我们可以用它来获取它['max_order']

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/-100005564

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档