簡體   English   中英

使用postgres的2個模型的Django queryset NOT INTERSECT

[英]Django queryset NOT INTERSECT for 2 models using postgres

我有一個Django應用,並且我試圖找出不在出勤2017-12-05中的員工。 我試圖找出一個查詢集來完成此任務。

以下是我想要完成的模型,記錄和結果的詳細信息。

我有2個型號:

class Employee(models.Model):
    fullname = models.CharField(max_length=30, blank=False)    

class Attendance(models.Model):
    CHECKIN = 1
    CHECKOUT = 2
    ATTENDANCE_TYPE_CHOICES = (
        (CHECKIN, "Check In"),
        (CHECKOUT, "Check Out"),
    )
    employee = models.ForeignKey(Employee)
    activity_type = models.IntegerField(choices = ATTENDANCE_TYPE_CHOICES, default=CHECKIN)
    timestamp = models.DateTimeField(auto_now_add=True)

假設我有以下記錄:

Employee
{"id":1, "employee":"michael jackson",
"id":2, "fullname":"mariah carey",
"id":3, "fullname":"taylor swift",
"id":4, "fullname":"selena gomez"}

Attendance
{"id":1, "employee": 1,"activity_type": 1, timestamp: "2017-12-05 09:08",     
"id":2, "employee": 2,"activity_type": 1, timestamp: "2017-12-05 10:13",
"id":3, "employee": 2,"activity_type": 2, timestamp: "2017-12-05 15:13", 
"id":4, "employee": 2,"activity_type": 1, timestamp: "2017-12-05 19:13", 
"id":5, "employee": 3,"activity_type": 1, timestamp: "2017-12-06 08:08"}

這是我要完成的預期輸出:

在2017-12-05日期中,該員工沒有出席(意味着2017-12-05中的出勤記錄沒有記錄)

{"id":3, "fullname":"taylor swift",
"id":4, "fullname":"selena gomez"}

列出在2017-12-05特定日期未出席的員工的查詢集是什么? 我相信這是一個交叉點,並且與員工不做任何事情。

您可以使用簡單的exclude()查詢來做到這一點:

from datetime import date

today = date.today()

Employee.objects.exclude(attendance__timestamp__date=today)

這將為您提供該日期沒有出勤記錄的所有員工。

有關如何創建查找的說明,請參見文檔的本部分

暫無
暫無

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

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