Nevermind, I think I figured it out.
On Oct 21, 3:13 pm, Charlie Gunyon <[EMAIL PROTECTED]> wrote:
> Hey everyone. Is there a way to get the latest ManyToMany related
> model? My models.py looks like this:
>
> class Conference(models.Model):
> name = models.CharField(max_length=30, unique=True)
>
> class Team(models.Model):
> name = models.CharField(max_length=30, unique=True)
> conferences = models.ManyToManyField('Conference',
> related_name='teams', through='ConferenceMembership')
>
> def _get_current_conference(self):
> return self.conferences.latest()
>
> conference = property(_get_current_conference)
>
> class Player(models.Model):
> name = models.CharField(max_length=15, unique=True)
> teams = models.ManyToManyField('Team', related_name='players',
> through='TeamMembership')
>
> def _get_current_team(self):
> return self.teams.latest()
>
> team = property(_get_current_team)
>
> class ConferenceMembership(models.Model):
> conference = models.ForeignKey('Conference')
> team = models.ForeignKey('Team')
> date_joined = models.DateField(auto_now_add=True)
>
> class Meta:
> get_latest_by = 'date_joined'
>
> class TeamMembership(models.Model):
> team = models.ForeignKey('Team')
> player = models.ForeignKey('Player')
> date_joined = models.DateField(auto_now_add=True)
>
> class Meta:
> get_latest_by = 'date_joined'
>
> This is important because Teams can change Conferences, and Players
> can change Teams, but their stats while on those Teams/Conferences
> have to remain under those Teams/Conferences.
>
> When I try and create a Team in the Admin section, the following happy
> error comes up:
>
> Exception Type: TemplateSyntaxError
> Exception Value: Caught an exception while rendering: latest()
> requires either a field_name parameter or 'get_latest_by' in the model
>
> So I think, "Oh, I need to move those 'get_latest_by' declarations
> into the top-level classes". So I change my models to look like this:
>
> class Conference(models.Model):
> name = models.CharField(max_length=30, unique=True)
>
> class Meta:
> get_latest_by = 'date_joined'
>
> class Team(models.Model):
> name = models.CharField(max_length=30, unique=True)
> conferences = models.ManyToManyField('Conference',
> related_name='teams', through='ConferenceMembership')
>
> class Meta:
> get_latest_by = 'date_joined'
>
> def _get_current_conference(self):
> return self.conferences.latest()
>
> conference = property(_get_current_conference)
>
> class Player(models.Model):
> name = models.CharField(max_length=15, unique=True)
> teams = models.ManyToManyField('Team', related_name='players',
> through='TeamMembership')
>
> class Meta:
> get_latest_by = 'date_joined'
>
> def _get_current_team(self):
> return self.teams.latest()
>
> team = property(_get_current_team)
>
> class ConferenceMembership(models.Model):
> conference = models.ForeignKey('Conference')
> team = models.ForeignKey('Team')
> date_joined = models.DateField(auto_now_add=True)
>
> class TeamMembership(models.Model):
> team = models.ForeignKey('Team')
> player = models.ForeignKey('Player')
> date_joined = models.DateField(auto_now_add=True)
>
> But when trying to add another team, I get a different error:
>
> Exception Type: TemplateSyntaxError
> Exception Value: Cannot resolve keyword 'date_joined' into field.
> Choices are: _order, conferencemembership, conferences, name, teams
>
> So I then try to access class attributes:
>
> class Conference(models.Model):
> name = models.CharField(max_length=30, unique=True)
>
> class Meta:
> get_latest_by = 'date_joined'
>
> class Team(models.Model):
> name = models.CharField(max_length=30, unique=True)
> conferences = models.ManyToManyField('Conference',
> related_name='teams', through='ConferenceMembership')
>
> class Meta:
> get_latest_by = 'conferencemembership.date_joined'
>
> def _get_current_conference(self):
> return self.conferences.latest()
>
> conference = property(_get_current_conference)
>
> class Player(models.Model):
> name = models.CharField(max_length=15, unique=True)
> teams = models.ManyToManyField('Team', related_name='players',
> through='TeamMembership')
>
> def _get_current_team(self):
> return self.teams.latest()
>
> team = property(_get_current_team)
>
> class ConferenceMembership(models.Model):
> conference = models.ForeignKey('Conference')
> team = models.ForeignKey('Team')
> date_joined = models.DateField(auto_now_add=True)
>
> class TeamMembership(models.Model):
> team = models.ForeignKey('Team')
> player = models.ForeignKey('Player')
> date_joined = models.DateField(auto_now_add=True)
>
> But I still get an error:
>
> Exception Type: TemplateSyntaxError
> Exception Value: Caught an exception while rendering: (1054, "Unknown
> column 'conferencemembership.date_joined' in 'order clause'")
>
> So my problem is that Conferences and Teams don't have dates to order
> by, but their relationships do (when a Team joined a Conference and
> when a Player joined a Team). I don't understand how to order those
> relationships to get the latest one. Am I using ManyToMany wrong? I
> don't see how else I would do it.
--~--~---------~--~----~------------~-------~--~----~
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 [EMAIL PROTECTED]
For more options, visit this group at
http://groups.google.com/group/django-users?hl=en
-~----------~----~----~----~------~----~------~--~---