Estoy creando un Grupo de personas y Membresía como se describe en Documentos de Django para el modelo intermedio.Campos de acceso en el modelo intermedio de Django
class Person(models.Model):
name = models.CharField(max_length=128)
def __unicode__(self):
return self.name
class Group(models.Model):
name = models.CharField(max_length=128)
members = models.ManyToManyField(Person, through='Membership')
def __unicode__(self):
return self.name
class Membership(models.Model):
person = models.ForeignKey(Person)
group = models.ForeignKey(Group)
date_joined = models.DateField()
invite_reason = models.CharField(max_length=64)
Es posible acceder a la persona de un objeto de grupo con:
>>>Group.members.name
¿El Django crea otra consulta a buscar a la persona? ¿Puedo acceder al campo date_joined
desde un objeto de grupo?
Lo que me confunde es que yo esperaría para obtener el campo de nombre de persona con:
>>>Group.members.person.name
¿Qué pasa si una persona tiene un 'nombre' de campo y también el modelo intermedio tienen un campo de nombre ' '.
Lo que dice tiene mucho sentido y en forma como entiendo modelos de Django. Lo que me confundió fue django docs sobre el modelo intemedaite en http://docs.djangoproject.com/en/1.0/topics/db/models/#extra-fields-on-many-to- many -relationships Muestran este ejemplo con los mismos modelos anteriores: # Encontrar todos los grupos con un miembro cuyo nombre comienza por 'Paul' >>> Group.objects.filter (members__name__startswith = 'Paul') [] Me esperaba debe ser: >>> Group.objects.filter (members__person__name__startswith = 'Paul') –
pablo
Es "Group.objects.filter (members__name__startswith = 'Paul')" porque los miembros son un administrador. Debe asegurarse de comprender que los miembros no son un objeto de Membresía, sino un objeto ManyRelatedManager. Creo que podría ayudarte si lees más sobre qué son exactamente los Gerentes. PDSi escribe "python manage.py shell" en un proyecto que tiene esos modelos, puede intentar poner "Group.objects.filter (members__person__name__startswith = 'Paul')" y ver qué sucede, ¿quizás eso lo ayude? –
Entiendo que los miembros son un gerente y leo sobre los gerentes. No entiendo cómo los miembros deciden usar el nombre para Persona y no para Grupo. Ambos tienen este campo. También es posible que la membresía tenga un nombre de campo. Me gustaría filtrar esto? – pablo