我想创建一个额外的管理器来获取反向ManyToMany关系的过滤版本。我有这些模型:
class Photo(models.Model):
# ...
is_public = models.BooleanField()
albums = models.ManyToManyField('Album')
class Album(models.Model):
# ...
我可以使用album.photo_set.all()
获取相册中的所有照片。我想提供一种方法,通过album.photo_set.public()
(在某处,.filter(is_public=True)
)来获取相册中的公开照片。
我想我想提供一个额外的Related manager,但我不确定是否可能。我不想或不需要替换默认的相关管理器(无论如何这听起来都是个坏主意)。我不需要关系的自定义直通模型,除非这是实现这一目标的唯一方法。
答案 0 :(得分:2)
当然,你可以成为一名相关经理,但这似乎有点矫枉过正。
为什么不直接在模型中添加一个只返回相册中公开照片的功能?
def get_public(self):
return self.photo_set.filter(is_public = True)
答案 1 :(得分:0)
您可以像这样创建经理:
class PublicManager(models.Manager):
use_for_related_fields = True
def public(self, *args, **kwargs):
kwargs.update({
'is_public': True
})
return self.get_queryset().filter(*args, **kwargs)