13

モデルを単純化して、何をしようとしているのかを明確にしました。

(アプリチームのmodels.py)

 from django.db import models
 from django.contrib.auth.models import User
 import datetime

class Team(models.Model):
    users = models.ManyToManyField(User)
    team_title = models.CharField(max_length=200)
    team_description = models.CharField(max_length=200)

    def __unicode__(self):
        return self.team_title

(アプリドキュメントのmodels.py)

from django.db import models
import datetime

class Document(models.Model):    
   teams = models.ManyToManyField("Teams.Team", blank=True)
   document_title = models.CharField(max_length=200)
   document_description = models.TextField()

def __unicode__(self):
    return self.document_title

私が達成したいのは、最初にドキュメントに関連付けられているすべてのチームを取得し、次にそれらのチームに関連付けられているすべてのユーザーを取得することによって、ドキュメントに関連付けられているユーザーのリストを取得することです。

これまでの私の試みはこのようなものになりました

(アプリドキュメントのview.py)

from django.contrib.auth.models import User
from Documents.models import *
from Teams.models import *

def docUsers(request, doc_id):
    current_document = Documents.objects.get(pk = doc_id)
    associated_users = current_document.teams.all().users

    ....

エラー:「QuerySet」オブジェクトには属性「users」がありません

associated_users = current_document.items.all().users.all()

エラー:「QuerySet」オブジェクトには属性「users」がありません

associated_users = current_document.items.users.all()

エラー:「ManyRelatedManager」オブジェクトに属性「users」がありません

私はこれを間違った方法で行っていますか?

4

1 に答える 1

17

はい、そうです。current_document.teams.all()チームのクエリセット(多かれ少なかれ、リスト)です。current_document.teams.all().usersクエリセット自体には「users」属性がないため、エラーが発生するため、を要求することは意味がありません。は、そのクエリセット内usersの各Team要素の属性です。したがって、それを行う1つの方法は、クエリセットを反復処理し、各チームに関連付けられているユーザーを要求することです。

ただし、それは絶望的に非効率的です。チームごとに1つのデータベース呼び出しがあります。より良い方法は、データベースに直接問い合わせることです。現在のドキュメントに関連付けられているチームに所属しているすべてのユーザーを教えてください。このような:

User.objects.filter(team__documents=current_document)
于 2012-04-18T19:01:39.923 に答える