通常过滤器的多对多关系中的自定义管理器

时间:2012-10-16 10:32:51

标签: django django-orm django-managers

class Proposal(models.Model):
    author = models.ForeignKey(Person, related_name="author")

    def get_tags(self):
        return Tag.objects.filter(tagged_proposals=self.id) 

class Tag(models.Model):
    tagged_proposals = models.ManyToManyField(Proposal)
    name = models.CharField(primary_key=True, max_length=60)

我需要在某个模板上列出提案的标签,这样我就会写{% for tag in proposal.get_tags %}并且效果很好。

现在我读到了有关管理员的信息,将get_tags转换为经理似乎是一个很好的举措。我尝试了以下但它没有输出一个东西。我究竟做错了什么?首先把它变成一个经理是否有意义?

class ProposalsTagsManager(models.Manager):
    def get_query_set(self):
                proposal_id = how-do-i-get-the-proposal-id???
        return Tag.objects.filter(tagged_proposals=proposal_id)

用法:{% for tag in p.tags.all %}输出:没有

1 个答案:

答案 0 :(得分:1)

您不需要自定义功能。

当使用ManyToManyField引用表时,您将获得一个名为MODEL_set的方法来获取该模型的查询集。

因此,在您的情况下,您可以像这样引用所有标签:

proposal = Proposal.objects.get(pk=1)
tags = proposal.tag_set.all() # You can also use filter here