2017-12-09 10 views
0

私はDjangoアプリケーションを持っていますが、私はAttendance 2017-12-05ではないEmployeeを見つけようとしています。私はこれを達成するためにクエリーセットを見つけようとしています。Django queryset postgresを使用した2つのモデルでINTERECTECTを使用しない

以下はモデル、レコード、および達成しようとしている結果の詳細です。

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"} 

これは意図した出力は、私が達成しようとしていますされています:私は以下のレコードを持っていると仮定すると、

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) 

は、私が2つの機種持っている日付の

を2017-この従業員は出席していません(つまり、出席者には2017-12-05の出席記録がありません)。

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

特定の日付2017-12-05に出席していない従業員を一覧表示するクエリーセットとは何ですか?私はその交差を信じ、従業員とNOTをしています。

答えて

1

あなたは、単純なexclude()クエリでこれを行うことができます。これは、あなたにその日のために記録されていないの出席はありませんでしたすべての従業員を与える

from datetime import date 

today = date.today() 

Employee.objects.exclude(attendance__timestamp__date=today) 

ルックアップの作成方法については、this section of the documentationを参照してください。

関連する問題