Tengo dos modelos de Django unidos entre sí por la relación ManyToMany así:Conseguir el primer artículo en una relación de muchos a muchos en Django
class Person(models.Model):
name = models.CharField(max_length=128)
class Group(models.Model):
name = models.CharField(max_length=128)
members = models.ManyToManyField(Person)
que necesito para obtener la persona principal en el grupo de los cuales es la primera persona en el grupo. ¿Cómo puedo obtener la primera persona?
Así es como estoy añadiendo miembros:
grp = Group.objects.create(name="Group 1")
grp.save()
prs = Person.objects.create(name="Tom")
grp.members.add(prs) #This is the main person of the group.
prs = Person.objects.create(name="Dick")
grp.members.add(prs)
prs = Person.objects.create(name="Harry")
grp.members.add(prs)
No creo que sea necesario ningún columnas adicionales como el id de la tabla group_members
es una secuencia de funcionamiento correcto.
Si trato de buscar el miembro principal del grupo a través de Group.objects.get(id=1).members[0]
entonces Django dice que el administrador no es indexable.
Si pruebo esto Group.objects.get(id=1).members.all().order_by('id')[0]
, obtengo el miembro con la identificación más baja en la tabla Person
.
¿Cómo puedo solucionar esto?
Gracias
¿Cómo desea para determinar quién es la "primera" persona en el grupo? ¿CARNÉ DE IDENTIDAD? ¿Alfabéticamente? – Brandon
El que tiene el 'id' más bajo en la tabla' group_members'. Los objetos nunca se eliminan de esta tabla, por lo que el miembro principal siempre será el mismo para un grupo. –
La respuesta de Alex Gaynor es correcta. Debería agregar un campo adicional para ordenar por el grupo, ya que no se garantiza que la columna ID sea secuencial para el grupo. – Brandon