2

楷模:

class Person(models.Model):
   name = ....

class Registration(models.Model):
   person  = models.ForeignKey(person)
   expires = models.DateField()

每年都会创建一个新的注册记录。

现在我想找到所有注册已过期或从未注册的人。就像是

Person.objects.filter(registration__expires__lte=date.today() )

但当然不能在针对人员的查询集中使用“注册”。

我需要在 person 对象中存储最新的注册日期吗?还是我先查询注册表?那么如何找到没有注册的人呢?

4

2 回答 2

0

要查找没有注册的人员,您可以使用注册计数注释您的人员查询,然后在带注释的字段上进行过滤:

from django.db.models import Count
Person.objects.annotate(reg_count=Count('registration')).filter(reg_count=0)

请参阅注释上的 Django 文档:

https://docs.djangoproject.com/en/dev/ref/models/querysets/#annotate

于 2013-09-10T03:12:12.607 回答
0

我想你想要 select_related https://docs.djangoproject.com/en/dev/ref/models/querysets/#select-related

person.objects.select_related('registration').filter(registration__expires__lte=date.today() )
于 2013-09-09T02:27:43.200 回答