小编Buf*_*fke的帖子

我怎么能不使用Django的管理员登录视图?

我创建了自己的登录视图.但是,如果用户直接访问/ admin,则会将其带到管理员登录页面,并且不会使用我的自定义视图.如何将其重定向到用于/ admin的所有内容的登录视图?

django django-admin django-authentication

22
推荐指数
4
解决办法
2万
查看次数

带有嵌套过滤器的Django注释

是否可以在注释中进行过滤?

在我看来这样的事情(实际上并不起作用)

Student.objects.all().annotate(Count('attendance').filter(type="Excused"))

由此产生的表格将让每个学生都有理由缺席.查看文档过滤器只能在注释之前或之后进行,否则将无法产生所需的结果.

解决方法就是这样

for student in Student.objects.all():
    student.num_excused_absence = Attendance.objects.filter(student=student, type="Excused").count()
Run Code Online (Sandbox Code Playgroud)

这可以工作,但在实际应用程序中执行很多查询,这可能会变得不切实际.我认为这种类型的语句在SQL中是可行的,但如果可能的话,我更愿意继续使用ORM.我甚至尝试过两个单独的查询(一个用于所有学生,另一个用于获得总数)并将它们与|组合.组合改变了总数:(

阅读答案和评论后的一些想法

我在这里使用额外的SQL解决了出勤问题.

  • 蒂米的博客文章很有用.我的答案是基于它的.
  • hash1baby的答案有效,但似乎与sql一样复杂.它还需要执行sql然后在for循环中添加结果.这对我不好,因为我将大量这些过滤查询堆叠在一起.我的解决方案构建了一个包含大量过滤器和额外的大型查询集,并立即执行所有操作.
  • 如果性能没有问题 - 我建议for循环工作.到目前为止,这是最容易理解的.

django

20
推荐指数
2
解决办法
8538
查看次数