Django过滤器相关字段

时间:2017-01-27 08:51:40

标签: django

我有相关的模特

class Profile:
   # some fields


# related model
class Plan:
   profile = models.ForeignKey(Profile, related_name='plans')
   start = models.DateField()

我希望能够过滤个人资料的计划。 例如,我想获取所有配置文件,但只选择尚未开始的计划。

是否有可能实现这种行为? 此代码不会返回将来没有计划的配置文件。这是行为不是我正在寻找的。我希望得到所有的个人资料并过滤他们的计划。

  

Profile.objects.filter(plans__start__gte =现在())

即使其中一些已经开始,它也将返回Profile的所有计划。

1 个答案:

答案 0 :(得分:1)

尝试使用Prefetch,这会为您提供所有个人资料,但其中的计划将按标准日期进行过滤:

plans = Plan.objects.filter(start__gte=now())
profiles = Profile.objects.prefetch_related(Prefetch('plans', queryset=plans)).all()