假设我有以下型号:
class Poll(model):
title = models.CharField()
class Option(model):
title = models.CharField()
polls = models.ManyToManyField(
Poll,
through='PollOption',
null=True,
blank=True,
related_name='options'
)
class PollOptionManager(models.Manager):
use_for_related_fields = True
def get_queryset(self):
return super(PollOptionManager, self).get_queryset().filter(
is_active=True
)
class PollOption(model):
poll = ForeignKey(Poll)
option = ForeignKey(Option)
is_active = BooleanField(default=True)
objects = PollOptionManager()
当我尝试查询Poll.options.all()
时,我仍然收到Option
PollOption.is_active
为False
的{{1}}个实例。如何让我的模型管理员根据ManyToMany
字段上的标记正确过滤我的through
关系?
答案 0 :(得分:1)
问题是直通模型(相关)管理器从未在您的方案中实际使用过。要使用自定义管理器,您必须明确使用它,例如:
class Poll(models.Model):
@property
def active_options(self):
return Option.objects.filter(id__in=self.polloption_set.values_list('option'))
此处,polloption_set
按预期过滤掉非活动选项。然而,这使得经理毫无意义,因为您可以将额外的过滤器放在定制属性中。