我有一个模型,其中包含一个带有through模型的ManyToManyField,该模型中有一个布尔字段,我想对其进行过滤。
from simulations.models import *
class DispatcherManager(models.Manager):
use_for_related_fields = True
def completed(self):
original = super(DispatcherManager,self).get_query_set()
return original.filter(dispatchedsimulation__status=True)
def queued(self):
original = super(DispatcherManager,self).get_query_set()
return original.filter(dispatchedsimulation__status=False)
class Dispatcher(models.Model):
name = models.CharField(max_length=64)
simulations = models.ManyToManyField('simulations.Simulation',
through='DispatchedSimulation')
objects = DispatcherManager()
class DispatchedSimulation(models.Model):
dispatcher = models.ForeignKey('Dispatcher')
simulation = models.ForeignKey('simulations.Simulation')
status = models.BooleanField()
我曾认为use_for_related_fields
变量可以让我像在分派器d中那样过滤m2m结果,例如:d.simulations.completed()
或d.simulations.queued()
,但这些似乎不像我预期的那样工作。我是否对use_for_related_fields
的工作原理有误解,还是我做错了什么?