On Fri, Aug 22, 2008 at 3:24 AM, Benjamin Buch <[EMAIL PROTECTED]> wrote:
> > > > > I'm not sure i understand you question. You can filter via the > > attributes of a related object like this: > > Recording.objects.filter(song__artist="Ben Folds") > > Yes, and that's perfectly all right when you are only interested only > in the related objects. > But what do you do when you want to do something like: > > "Give my all songs that start with the letter R AND limit the related > recording_set to the recordings that have represents_song=True"? > > You could do this with two queries: > songs = Song.objects.filter(title__startswith='R') > recordings = Recording.objects.filter(represents_song=True) > > But then there would be no connection between songs and recordings. > Every song in songs would still have attached all recordings that > belong to the song, not only the recordings with represents_song=True. > > What I want is to filter objects and at the same time the FOO_sets of > the single objects. > When I understand this right, with filters you can either filter the > objects itself OR you can filter the related objects, but not both at > the same time. > > I think this can only be don via a custom manager or a custom method. > > As I don't understand how custom managers work yet to well, I tried it > with a custom method: > > class Song(models.Model): > title = models.CharField(max_length=50) > description = models.TextField(blank=True) > > def __unicode__(self): > return self.title > > def get_representative_recording(self): > representative_recording = > self.recording_set.get(represents_song=True) > return representative_recording > > class Recording(models.Model): > song = models.ForeignKey(Song) > mp3 = models.FileField(upload_to='songs') > represents_song = models.BooleanField() > > I can now filter the songs in the view: > > songs = Song.objects.filter(filter_for_whatever_you_like_here) > > And access the "representative recording" like this in the template: > > {{ song.get_representative_recording.mp3.url }} > > I can't see how this could be done only by filtering, without a custom > method or a custom manager. > > -benjamin > How about: songs = Recording.objects.filter(song__title__startswith='R', represents_song=True) http://www.djangoproject.com/documentation/db-api/#filter-kwargs "Multiple parameters are joined via AND in the underlying SQL statement." - Garrett > > > > > > --~--~---------~--~----~------------~-------~--~----~ 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 -~----------~----~----~----~------~----~------~--~---