我编写自定义管理器,在模板中使用它来显示侧面板上的相关图片。 我的经理工作不对,我不明白为什么。
class RelatedPicsManager(models.Manager):
use_for_related_fields = True
def sidepics(self):
return super(RelatedPicsManager, self).get_queryset().filter(side = True)
class News (models.Model):
...
pass
class ExtPhoto(models.Model):
news = models.ForeignKey(News, related_name = 'extphotos')
side = models.BooleanField(...)
...
objects = RelatedPicsManager()
当我得到新闻并尝试查看其所有侧面图片
>>> onnews.extphotos.sidepics()
我的经理返回side = True的所有ExtPhoto对象。 但我只需要与“onenews”相关。
答案 0 :(得分:0)
我认为您可以使用自定义QuerySet
:
class ExtPhotoQuerySet(models.query.QuerySet):
def sidepics(self):
return self.filter(side=True)
class ExtPhotoManager(models.Manager):
use_for_related_fields = True
def get_queryset(self):
return ExtPhotoQuerySet(self.model)
class ExtPhoto(models.Model):
objects = ExtPhotoManager()
这样,onnews.extphotos.sidepics()
仅过滤与onnews
相关的照片。如果您还想使用ExtPhoto.objects.sidepics()
,我建议您从django-model-utils继承PassThroughManager
。这使得您的经理可以使用所有查询集方法。