1

次のようなプロジェクトモデルがあります。

class Project(models.Model):
    ...
    lead_analyst=models.ForeignKey(User, related_name='lead_analyst')
    ...

django 集約を使用して、ユーザーごとのプロジェクト数ですべてのユーザーを返したいと考えています。何かのようなもの:

models.User.objects.annotate(project_count=Count('project_set'))

auth.user私の Project クラスに関する知識がないため、それだけでは機能しません。エラーが発生します:

キーワード「project_set」をフィールドに解決できません。選択肢: date_joined、email、employee、first_name、groups、id、is_active、is_staff、is_superuser、last_login、last_name、lead_analyst、logentry、message、password、siteprofile、submitter、user_permissions、username

2 つの部分からなる質問です。

  1. このプロジェクトあたりの数を取得する方法auth.user

  2. auth.userProject クラスとこの集約を実行可能にするクラスとの間の関連付けを記述するより良い方法はありますか?

それとも、集計のために生のSQLに侵入する必要がありますか(djangoの生のSQLまたはデータベースのビューのいずれかを介して)?

4

1 に答える 1

4

モデルに問題はありません。まさにその関係を設定する方法です。問題は、外部キーでaを指定したことです。related_nameユーザーに関する限り、存在しません。代わりにproject_set存在しlead_analystます。実際、これはエラーメッセージで示されたフィールドのリストで確認できます。

したがって、集計クエリは次のようになります。

models.User.objects.annotate(project_count=Count('lead_analyst'))

(ここで誤解を招くような関連する名前を選択したと思います。デフォルトのままにしておく方がよいでしょう。その場合、元の構文が機能します。)

于 2009-10-28T19:46:06.660 に答える