He simplificado mis modelos para aclarar más lo que estoy tratando de hacer.Django: accediendo a muchos a muchos objetos a través de otra relación Muchos a Muchos
(models.py en aplicaciones de Equipos)
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 en los Documentos de aplicaciones)
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
Lo que queremos lograr es conseguir una lista de usuarios que han están asociados con un Documento al obtener primero todos los equipos asociados con el documento y luego obtener todos los usuarios asociados con esos equipos.
Mis intentos hasta ahora han pasado algo como esto
(view.py en los Documentos de aplicaciones)
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
....
error: objeto 'QuerySet' no tiene atributo 'usuarios'
associated_users = current_document.items.all().users.all()
Error: objeto 'QuerySet' no tiene atributo 'usuarios'
associated_users = current_document.items.users.all()
error: objeto 'ManyRelatedManager' no tiene 'usuarios' de atributos
¿Me voy de este por el camino equivocado?
Todavía estoy confundido. la asociación de modelos de equipo con el modelo de documentos es de documentos a equipos, y no al revés (sé que este no es el enfoque más lógico, pero no puedo cambiar la estructura del modelo), entonces, ¿cómo puedo filtrar los documentos del equipo? – Finglish
@agf 1. No, usted usa los nombres reales del modelo dentro de la expresión del filtro. 2. No, usas = para buscar un solo elemento dentro de una relación M2M/FK. Ver [búsquedas que abarcan relaciones] (https://docs.djangoproject.com/en/1.3/topics/db/queries/#lookups-that-span-relationships). –
@Finglish puede acceder a las relaciones desde ambos lados. Ver el enlace que le di a agf. –