[Answer]-How to make a filter so as to have two entries for each user?

1๐Ÿ‘

โœ…

Iโ€™m a django newbe, but recently I had similar problem.
Maybe it will make it for You.

I had users based on django User model and Movies with field owner. I wanted to display last 2 movies of every user, grouped by users and sorted by movie publication date.

What I did, was:

  • Create and add method to User model (it returns list of 2 movies of user):

    from django.contrib import auth
    
    def get_users_last_movies(self):
        movies = Movies.objects.filter(state=3,
                 pubdate__lte=datetime.now(), 
                 owner=self).order_by('-pubdate')[0:2]
        return movies
    
    auth.models.User.add_to_class('get_users_last_movies', get_users_last_movies)
    
  • in view file select all Users your interested in and append their movies to them, use sort method on created user list

    dusers = User.objects.filter(is_active=True)
    users = []
    for duser in dusers:
        duser.movies = duser.get_users_last_movies()
        users.append(duser)
    users.sort(key=lambda x: x.movies[0].pubdate, reverse=True)
    data['dusers'] = users
    

Hope that this code will get You on track

๐Ÿ‘คKwiatekP

Leave a comment