1

如果我有 2 个相互关联的模型:

class Person(models.Model)
    name = models.CharField()

class Project(models.Model):
    person = models.ForeignKey(Person)
    title = models.CharField()

我经常发现自己试图找到与每个人相关的项目数量:

person = Person.objects.get(id=1)
no_projects = Project.objects.filter(person=person).count()

有没有办法将此作为自定义字段添加到 Person 模型中,以便我可以调用person.no_projects

4

3 回答 3

4

事实上,该功能(几乎)是内置的。而不是查询项目,您可以只person.project_set.count()获取该人的项目计数(并.all()获取实际列表)。

于 2012-04-17T09:45:46.797 回答
4

这可以通过向 Person 类添加一个属性来完成。

class Person(models.Model)
    name = models.CharField()

    @property
    def no_projects(self):
        return Project.objects.filter(person=self).count()

现在可以这样调用

person = Person.objects.get(id=1)
person.no_projects
于 2012-04-17T09:35:50.897 回答
1

您可以使用 property() 来生成动态场。

class Project(models.Model):
    person = models.ForeignKey(Person)
    title = models.CharField()

    def _get_no_projects(self):
        return Projects.objects.filter(person=self).count()

    no_projects = property(_get_no_projects)

但是动态字段不能用于查询,因为它们并没有真正将数据存储到数据库中。

仅供参考:http ://www.b-list.org/weblog/2006/aug/18/django-tips-using-properties-models-and-managers/

于 2012-04-17T09:36:25.943 回答