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)
当用户选择主题,然后选择列表(子类别)时,这是有意义的,该列表显示该列表上的所有活动.
但是我如何有效地查询类似的东西
我是否需要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.)