簡體   English   中英

Django - 過濾與今天日期相關的 prefetch_related

[英]Django - filtering prefetch_related to today's date

過濾 prefetch_related。

我有兩張桌子:

  1. 學生出勤數據
class studentAttendance(models.model):
  id = models.AutoField(primary_key=True)
  date = models.DateField()
  status = models.CharField(max_length=255)
  student = models.ForeignKey(Student, related_name='student', on_delete=models.PROTECT)
  objects = models.Manager()
  1. 學生人事記錄
class Student(models.model):
  id = models.AutoField(primary_key=True)
  fname = models.CharField(max_length=255)
  active = models.BooleanField(default=True)
  objects = models.Manager()

客觀的:

我想要一個“每日登記”html 表格。 加載每日記錄時,我希望它顯示以下列:

名字 | 姓氏 | 狀態 |

在它旁邊,我將為老師選擇 select “Present” 或 “Absent”。

我的問題:

我需要顯示所有“活躍”學生的列表,然后為尚未登錄的學生顯示空狀態,或者為已登錄的學生顯示已經存在的值。

我認為由於一個學生在出勤表中可以有很多“天”,這算作“預取相關”場景,而不是“選擇相關”。 如果我從出勤表轉到學生表,那將是“select_related”,因為學生表中只有一行匹配。 這就是我最初的方式,但后來我很快意識到,對於那些還沒有登錄的學生......他們的記錄不會被拉過。

所以我第一次嘗試獲取預取是:

from students.models import Student
from datetime import date

student_data = Student.objects.filter(active=True).prefetch_related('student')

但是,我需要過濾 prefetch_related 以針對今天的日期進行過濾。 我在嘗試:

student_data = ...filter(date=date.today())

但我收到一個錯誤:

“語法錯誤:表達式不能包含賦值,也許你的意思是“==”?

我在谷歌上看到了很多關於“prefetch_related(prefetech('student', queryset='')) 的東西,但這似乎不起作用,而且我收到了“意外關鍵字“prefetch”等錯誤。

請幫助或指出我正確的方向。

謝謝!

您的過濾器需要:

student_data = Student.objects.filter(
    active=True,
    student__date=date.today()
).prefetch_related('student')

要過濾帶有或不帶有select_relatedprefetch_related的相關字段,您需要一個雙下划線。

請參閱此處的 Django 文檔進行過濾。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM