Mission
Mission

Reputation: 1297

Django Model Manager related filter

I'd like to filter the related entries in the manager:

class UserTravelsCarsManager(models.Manager):
    def for_user(self, user):
        return super(UserTravelsCarsManager, self).get_query_set().filter(user=user)

class TravelsCars(models.Model):
    user = models.ForeignKey(User)
    name = models.CharField(max_length=255)
    ...
    objects = UserTravelsCarsManager()

class UserTravelsManager(models.Manager):
    def for_user(self, user):
        return super(UserTravelsManager, self).get_query_set().filter(user=user)

class Travels(models.Model, ClonableMixin):
    user = models.ForeignKey(User)
    vehicle = models.ForeignKey(TravelsCars)
    ...

    objects = UserTravelsManager()

It won't work by itself. I get all of the cars for all users. I've tried:

return super(UserTravelsManager, self).get_query_set().filter(user=user, vehicle__user=user)

Which also doesn't work.

UPDATE: Just to be clear the entries for Travels are filtered. Just the related TravelsCars aren't filtered if I query them through Travels.

What am I doing wrong?

Upvotes: 3

Views: 557

Answers (1)

szaman
szaman

Reputation: 6756

Instead of super(UserTravelsCarsManager, self).get_query_set().filter... try to use self.filter(user=user). Same in UserTravelsManager

Upvotes: 2

Related Questions