2016-03-08 81 views
0

我有一個名爲ClassRoom模型,Django的多對多場過濾器使用時間創建

class ClassRoom(model.Model): 
    class_name = models.CharField(max_lenth=100) 
    students = models.ManyToManyField(User) 

view.py這樣。

def addstudents(request): 
    class_room = ClassRoom.objects.get(id=1) 
    class_name.students.add(request.user) 

我將學生添加到ClassRoom這樣。 我想列出所有今天加入課堂的學生。 我如何過濾their joining time

當我們使用django ManyToManyField時,然後Django在數據庫中創建一個額外的表。在該表中包含created時間。我可以使用此字段進行過濾嗎?

+0

定義「加盟今天「,你如何跟蹤他們加入的那一天? – Sayse

+0

這是我的問題。在數據庫中,django爲這個many2many創建了一個額外的表。在該表中包含創建的日期。我們可以使用該表創建的字段值進行過濾嗎? –

+0

你確定有'created'字段嗎?如果是,您可以使用它來過濾 – Gocht

回答

1

您可以使用自定義表(docs here)向M2M關係表中添加額外字段。

class ClassRoom(models.Model): 
    class_name = models.CharField(max_length=100) 
    students = models.ManyToManyField(User, through='ClassMate') 


class ClassMate(models.Model): 
    class_room = models.ForeignKey(ClassRoom, on_delete=models.CASCADE) 
    user = model.ForeignKey(User, on_delete=models.CASCADE) 
    date_joined = models.DateField(auto_now_add=True) 

然後,你可以這樣做:

class_room = ClassRoom.objects.get(...) 

class_room.students.filter(date_joined=datetime.today()) 

請記住,(如文檔說)現在你必須實例ClassMate對象添加一個關係:

class_room = ClassRoom.objects.get(...) 
user = request.user 
class_mate = ClassMate(class_room=class_room, user=user) 
class_mate.save() 
+0

用戶已經創建一個,現在該用戶被添加到一個ClassRoom中,用戶創建的時間和用戶添加到一個ClassRoom時間,兩者都不同 –

+0

用戶創建的時間不在這裏,'date_joined'需要花費時間創建'ClassMate'實例與'ClassRoom' a nd'用戶'實例 – Gocht

+0

謝謝讓我試試 –