2016-03-08 54 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

谢谢让我试试 –