我需要一些帮助在我的视图中创建自定义Django查询。我有两个模型,部门和团队,每个部门可以有多个团队。用户可以按任何顺序手动对团队进行排序,一旦完成,每个Team实例上的订单字段都会更新。所以,现在当创建一个新的团队时,我希望获得特定部门中最大的Team.order值。
下面这部分返回所有Team实例Team.objects.filter(department=team.department.id)
,但是如何从订单字段中获取最大值(除了循环)?
视图
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))
发布于 2018-07-09 18:04:42
如果要将整个项目集合“ 折叠 ”为一个或多个值,则称为.aggregate(..)
[django-doc]。所以我们可以编写如下的聚合:
Team.objects.filter(
department=team.department.id
).aggregate(
max_order=Max('order')
)['max_order']
该.aggregate(..)
会执行查询,并返回一个字典的聚集体的结果。由于这里只有一个聚合(作为名称max_order
),因此字典包含该元素。因此我们可以用它来获取它['max_order']
。
https://stackoverflow.com/questions/-100005564
复制相似问题