Ich habe meine Modelle vereinfacht, um klarer zu machen, was ich versuche zu tun.Django: Zugriff auf viele zu viele Objekte durch eine andere Viele zu viele Beziehung
(models.py in App Teams)
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 in App Documents)
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
Was ich will, eine Liste von Benutzern zu erreichen, wird immer die mit zugeordnet haben ein Dokument, indem zuerst alle mit dem Dokument verknüpften Teams abgerufen und anschließend alle mit diesen Teams verbundenen Benutzer abgerufen werden.
Meine bisherigen Versuche haben so etwas wie dieses
(view.py in App Documents) gegangen
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
....
Fehler: 'QuerySet' Objekt hat kein Attribut
associated_users = current_document.items.all().users.all()
'users'
Fehler: 'QuerySet' Objekt hat kein Attribut 'Benutzer'
associated_users = current_document.items.users.all()
Fehler: 'ManyRelatedManager' Objekt hat kein Attribut 'users'
Bin ich über diese gehen in die falsche Richtung?
Ich bin immer noch verwirrt. Die Zuordnung der Team-Modelle zum Documents-Modell erfolgt von Dokumenten zu Team, nicht umgekehrt (ich weiß, dass dies nicht der logischste Ansatz ist, aber ich darf die Modellstruktur nicht ändern). Wie kann ich Team__Dokumente filtern? – Finglish
@agf 1. Nein, Sie verwenden die tatsächlichen Modellnamen innerhalb des Filterausdrucks. 2. Nein, Sie verwenden = um ein einzelnes Element innerhalb einer M2M/FK-Beziehung nachzuschlagen. Siehe [Suchvorgänge, die Beziehungen überspannen] (https://docs.djangoproject.com/en/1.3/topics/db/queries/#lookups-that-span-relationships). –
@Finglish können Sie auf Beziehungen von beiden Seiten zugreifen. Siehe den Link, den ich Agf gegeben habe. –