Django获得相关模型的所有记录

jva*_*ooy 8 python django django-models django-queryset

我有3个待办事项列表应用程序模型:

class Topic(models.model)
    user = models.ForeignKey(UserProfile)
    lists = models.ManyToManyField(List)

class List(models.model)
    activities = models.ManyToManyField(Activity)

class Activity(models.model)
    activity = models.CharField(max_length=250)
Run Code Online (Sandbox Code Playgroud)

当用户选择主题,然后选择列表(子类别)时,这是有意义的,该列表显示该列表上的所有活动.

但是我如何有效地查询类似的东西

  • 用户X的所有活动(无论是主题还是列表)
  • 用户X的主题X的所有活动(不论列表)

我是否需要select_related()在查询中使用而不是通过相关对象循环,或者是否有更有效的方法而不循环?(或者我应该改变我的模特?)

Dan*_*man 12

使用双下划线语法来查询关系.

用户的所有活动:

Activity.objects.filter(list__topic__user=my_user)
Run Code Online (Sandbox Code Playgroud)

用户对主题的所有活动:

Activity.objects.filter(list__topic=my_topic)
Run Code Online (Sandbox Code Playgroud)

(请注意,目前主题仅针对单个用户.不确定这是不是您的意思:您描述用户选择主题,这在此处不可能发生.可能从Topic到UserProfile的链接应该是另一种方式,或者成为ManyToMany.)