Getting the first element of a many-to-many attitude in Django

I have two models in Django, interconnected by the ManyToMany relation as follows:

class Person(models.Model):
    name = models.CharField(max_length=128)

class Group(models.Model):
    name = models.CharField(max_length=128)
    members = models.ManyToManyField(Person)

I need to get the main person in the group, which is the first person in the group. How can I get the first person?

This is how I add members:

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)

I don’t think I need extra columns, since the table identifier group_membersis the correct sequence.

If I try to extract the main group member through Group.objects.get(id=1).members[0], then Django says that the manager is not indexed.

If I try this one Group.objects.get(id=1).members.all().order_by('id')[0], I get the member with the smallest id in the table Person.

How can i solve this?

thank

+5
source share
4

Django add. Django , Django:

class GroupMembers(models.Model):
    group = models.ForeignKey(Group)
    person = models.ForeignKey(Person)

, "" . , , , pk, , .

, . , , Django , . order :

class GroupMembers(models.Model):
    class Meta:
        ordering = ['order']

    group = models.ForeignKey(Group)
    person = models.ForeignKey(Person)
    order = models.PositiveIntegerField(default=0)

Django , :

class GroupMembers(models.Model):
    group = models.ForeignKey(Group)
    person = models.ForeignKey(Person, through='GroupMembers')

, , add, . :

prs = Person.objects.create(name="Tom")
GroupMembers.objects.create(person=prs, group=grp, order=1)
prs = Person.objects.create(name="Dick")
GroupMembers.objects.create(person=prs, group=grp, order=2)
prs = Person.objects.create(name="Harry")
GroupMembers.objects.create(person=prs, group=grp, order=3)

:

Group.objects.get(id=1).members.all()[0]

BooleanField, , :

class GroupMembers(models.Model):
    group = models.ForeignKey(Group)
    person = models.ForeignKey(Person)
    is_main_user = models.BooleanField(default=False)

"Tom", :

prs = Person.objects.create(name="Tom")
GroupMembers.objects.create(person=prs, group=grp, is_main_user=True)

, , "" :

Group.objects.get(id=1).members.filter(is_main_user=True)[0]
+4

. , "". "", .

+3

:

Group.objects.get(id=1).members.all()[0]

(, , )

+1

, "" , through

0
source

All Articles