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 に答える