这是一个遥不可及的问题(从Django文档来看似乎不可能,但我想问一下只是想看看有没有人有什么想法)。注意:我使用的是django1.4。在
我想对预取相关()查询使用自定义模型管理器。然后,除此之外,我想以某种方式对预取的结果进行排序。在
为了简化代码,我有以下模型(注意:Participant
模型从代码中排除,因为它是无关的):
class GoalParticipant(models.Model):
"""Many-to-many model between Goal and Participant models."""
participant = models.ForeignKey(
'Participant', related_name='goal_participants')
goal = models.ForeignKey('Goal', related_name='goal_participants')
active = models.BooleanField(default=True)
class Goal(models.Model):
name = models.CharField(max_length=50)
progress = models.IntegerField()
active = models.BooleanField(default=True)
class Milestone(models.Model):
name = models.CharField(max_length=50)
progress = models.IntegerField()
goal = models.ForeignKey('Goal', related_name='milestones')
active = models.BooleanField(default=True)
从这里,我的页面控制器获得一个GoalParticipant
Id值(称为pid
)。我想显示该ID的所有目标和里程碑
所以像这样的东西会正常工作:
^{pr2}$以下是两条皱纹:
1:自定义模型管理器
我所有的类都有自定义模型管理器,如下所示:
objects = ActiveManager()
all_objects = models.Manager()
ActiveManager
在查询集上运行.filter(active=True)
。这是为了方便起见,所以我可以很容易地在默认情况下说.objects
并抛出活动过滤器。不过,偶尔我需要显示所有对象,而不仅仅是活动对象。我试过了:
GoalParticipant.all_objects.filter(participant=pid).select_related(
).prefetch_related('goal__milestones')
这给了我所有的目标参与者和所有目标,但仍然只限于活动的里程碑。有没有办法强制prefetch_related
使用all_objects
模型管理器?在
2:里程碑的自定义排序
用户实际上可以通过UI中的name
或{ordering
的变量,顺序正确,我可以这样做:
GoalParticipant.objects.filter(participant=pid).select_related(
).order_by(ordering).prefetch_related('goal__milestones')
这对目标进行了正确的排序,但似乎没有任何方法可以强制里程碑以相同的方式排序。有办法吗?在
提前感谢你的帮助,如果我能澄清什么就告诉我。在
目前没有回答
相关问题 更多 >
编程相关推荐