У меня есть такие модели, как следующим образом:Джанго QuerySet фильтр над столиками
class Node(models.Model):
name = models.CharField(max_length=128)
user = models.Foreignkey(User)
class Meta:
db_table = 'node'
class Thing(models.Model):
user = models.ForeignKey(User)
begin_time = models.DateTimeField()
node = models.ManyToManyField(Course)
class Meta:
db_table = 'thing'
class NodeLog(models.Model):
actor = models.ForeignKey(User)
node = models.ForeignKey(Node, related_name='nodelog_node')
action_time = models.DateTimeField()
result = models.CharField(max_length=128)
class Meta:
db_table = 'node_log'
И данные, такие как следующие:
table: node
+----+-------+---------+
| id | name | user_id |
+----+-------+---------+
| 1 | node1 | 101 |
+----+-------+---------+
| 2 | node2 | 102 |
+----+-------+---------+
table: thing
+----+---------+---------------------+
| id | user_id | begin_time |
+----+---------+---------------------+
| 1 | 1 | 2015-01-01 03:00:00 |
+----+---------+---------------------+
table: thing_node
+----+----------+---------+
| id | thing_id | node_id |
+----+----------+---------+
| 1 | 1 | 1 |
+----+---------+----------+
| 2 | 1 | 2 |
+----+---------+----------+
table: node_log
+----+----------+---------+------------------------------+
| id | actor_id | node_id | action_time | result |
+----+----------+---------+------------------------------+
| 1 | 101 | 1 |2015-01-01 01:00:00 | agree |
| 2 | 102 | 2 |2015-01-01 02:00:00 | agree |
| 3 | 101 | 1 |2015-01-01 04:00:00 | agree |
+----+----------+---------+--------------------+---------+
Если кто-то согласился и его action_time больше BEGIN_TIME, он не может согласиться снова , поэтому я исключаю следующее:
Thing.objects.filter(***).exclude(node__nodelog_node__action_time__gt=F('begin_time'), node__nodelog_node__actor=request.user)
request.user - 102, а результат - []. Результат
Thing.objects.filter(***)
прав, любое предложение? Благодаря!