On Feb 10, 8:25 am, Almost George <almostgeo...@almostexciting.com>
wrote:
> On Feb 10, 1:30 am, Daniel Roseman <roseman.dan...@googlemail.com>
> wrote:
>
>
>
> > On Feb 10, 5:03 am, Almost George <almostgeo...@almostexciting.com>
> > wrote:
>
> > > On the following example models (actual models, removed of cruft that
> > > doesn't seem to apply) I'd like to add a "get_upcoming_events" method
> > > to Band like the one on Venue, but because of the relationship I'm not
> > > sure how to use the API/filter. (An Event has the same bands, at
> > > possibly different occurrences, whereas each Occurrence happens at a
> > > particular Venue - if the models/structure needed justifying).
>
> > > [ code highlighted @ dpaste:http://dpaste.com/118817/]
>
> > > class Event(models.Model):
> > > name = models.CharField(max_length=50, unique=True)
> > > bands = models.ManyToManyField(Band)
>
> > > class EventOccurrence(models.Model):
> > > name = models.CharField(max_length=50, blank=True)
> > > venue = models.ForeignKey(Venue)
> > > event = models.ForeignKey(Event)
> > > start = models.DateField()
> > > end = models.DateField()
>
> > > class Band(models.Model):
> > > admin_approved = models.BooleanField(default=False)
> > > name = models.CharField(max_length=50, unique=True)
>
> > > def get_upcoming_events(self):
> > > # How do I get Events, where the EventOccurrence.start is
> > > filtered
> > > # the same as this method on the Venue model?
> > > pass
>
> > > class Venue(models.Model):
> > > name = models.CharField(max_length=50)
>
> > > def get_upcoming_events(self):
> > > return self.eventoccurrence_set.filter
> > > (start__gte=datetime.today())
>
> > Looks like you could just use the same filter as in Venue, just adding
> > 'event' before:
> > self.event.eventoccurence_set.filter(...)
> > --
> > DR.
>
> That doesn't seem to work. Here's my manage.py shell session, which
> appears as I expected it to: (hopefully email clients/google won't
> screw up the quoting, otherwise seehttp://dpaste.com/118932/)
>
> >>> from xmx.models import Band
> >>> b = Band.objects.get(name__startswith='r')
> >>> b
> <Band: rod>
> >>> b.get_upcoming_events
>
> <bound method Band.get_upcoming_events of <Band: rod>>>>>
> b.get_upcoming_events()
>
> Traceback (most recent call last):
> File "<console>", line 1, in <module>
> File "/xxxx/xxxxx/django_projects/../xmx/models.py", line 39, in
> get_upcoming_events
> return self.event.eventoccurrence_set.filter
> (start__gte=datetime.today())
> AttributeError: 'Band' object has no attribute 'event'
>
> - Any other suggestions?
I'm going to wrap this up with the (a?) correct answer:
I was going about this backwards by going about it in a forward way. I
should have been thinking backwards, in other words.
I simply changed the Band model to have this method:
def get_upcoming_events(self):
"""
Get the list of upcoming events for this band.
"""
#return self.event_set.eventoccurrence_set.filter
(start__gte=datetime.today())
return EventOccurrence.objects.filter
(event__bands__id=self.id)
Starting with what I wanted, instead of "where I was".
If this is not the correct way (for intuitive or other reasons) please
let me know. Just wanted to make sure I put a "solution" to the
problem I posted.
--~--~---------~--~----~------------~-------~--~----~
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
-~----------~----~----~----~------~----~------~--~---