On Wednesday, February 16, 2011 12:36:49 AM UTC, Margie Roginski wrote:
>
> Say I am using an intermediary model like that in the doc: 
>
> class Person(models.Model): 
>     name = models.CharField(max_length=128) 
>
> class Group(models.Model): 
>     name = models.CharField(max_length=128) 
>     members = models.ManyToManyField(Person, through='Membership') 
>
> class Membership(models.Model): 
>     person = models.ForeignKey(Person) 
>     group = models.ForeignKey(Group) 
>     date_joined = models.DateField() 
>
> For a given group, say I want to go through the persons in the group 
> and print the date each joined the group. 
>
> beatles = Group.objects.get(name="beatles") 
> for person in group.members.all(): 
>    # get join date for person 
>
> What's the best way to do this?  It seems to me that I have to add a 
> related_name to the person field of Membership like this: 
>
>     person = models.ForeignKey(Person, related_name="memberships") 
>
> and then traverse backward from the person back to the membership, 
> filtering to find the correct membership based on the group name.  Can 
> someone tell me if there is a better way?  So I'm thinking I have to 
> do this: 
>
> beatles = Group.objects.get(name="beatles") 
> for person in group.members.all(): 
>   joinDate = person.memberships.filter(group_name="beatles") 
> [0].date_joined 
>
> Thanks for any pointers, 
>
> Margie


It's easier than that. You can get all memberships for a group in one go:

    memberships = 
Membership.objects.filter(group__name="beatles").select_related()
    for m in memberships:
        print m.person.name, m.date_joined

--
DR.

-- 
You received this message because you are subscribed to the Google Groups 
"Django users" group.
To post to this group, send email to django-users@googlegroups.com.
To unsubscribe from this group, send email to 
django-users+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/django-users?hl=en.

Reply via email to