Home > Blockchain >  How do I sort the movies according to their star ratings and filter the movies with lower rating tha
How do I sort the movies according to their star ratings and filter the movies with lower rating tha

Time:07-24

I want to sort the movies according to their star ratings and filter the movies with lower rating than the specified threshold. I want to sort movie and TV information in descending order by stars, search by each ID, and display data.json format and socre. However, I get a'module' object does not support item assignment error. context ["movie"] = in movie_list

class Movie(models.Model):
    id = models.CharField(primary_key=True, editable=False,
                          validators=[alphanumeric],max_length = 9999)
    stars = models.FloatField(
                    blank=False,
                    null=False,
                    default=0, 
                    validators=[MinValueValidator(0.0),
                     MaxValueValidator(10.0)]
                     )
    def get_comments(self):
        return Comment_movie.objects.filter(movie_id=self.id)
    
    def average_stars(self):
        comments = self.get_comments()
        n_comments = comments.count()

        if n_comments:
            self.stars = sum([comment.stars for comment in comments]) / n_comments
        else:
            self.stars = 0
        return self.stars
class TV(models.Model):
    id = models.CharField(primary_key=True, editable=False,
                          validators=[alphanumeric],max_length = 9999)
    stars = models.FloatField(
                    blank=False,
                    null=False,
                    default=0, 
                    validators=[MinValueValidator(0.0),
                     MaxValueValidator(10.0)]
                     )
    def get_comments(self):
        return Comment_tv.objects.filter(tv_id=self.id)
    
    def average_stars(self):
        comments = self.get_comments()
        n_comments = comments.count()

        if n_comments:
            self.stars = sum([comment.stars for comment in comments]) / n_comments
        else:
            self.stars = 0
        return self.stars
          
def Score_by(request):
    movies = Movie.objects.order_by('-stars')
    movie_list= []
    if movies.exists():
        for obj in movies:
            data = requests.get(f"https://api.themoviedb.org/3/movie/{obj.id}?api_key={TMDB_API_KEY}&language=en-US")
            movie_list.append(data.json())
        context["movie"] = movie_list
    tv = TV.objects.order_by('-stars')
    tv_list = []
    if tv.exists():
        for obj in tv:
            data = requests.get(f"https://api.themoviedb.org/3/tv/{obj.id}?api_key={TMDB_API_KEY}&language=en-US")
            tv_list.append(data.json())
        context["tv"] = tv_list
    return render(request, 'Movie/score_by.html', context)
<div >

    {% for m in movie.results %}
        <div  style="width: 18rem;">
            <img src="https://image.tmdb.org/t/p/w200{{ m.poster_path }}"  alt="...">
            <div >
            {% if not m.name %}
                <h5 >{{ m.title }}</h5>
            {% else %}
                <h5 >{{ m.name }}</h5>
            {% endif %}
            <p >{{ m.overview }}</p>
            <a href="/{{ type }}/{{ m.id }}/" >View Details</a>
            </div>
        </div>
    {% endfor %}
</div>
<h1>TV Score_by</h1>
<div >
    {% for m in tv.results %}
        <div  style="width: 18rem;">
            <img src="https://image.tmdb.org/t/p/w200{{ m.poster_path }}"  alt="...">
            <div >
            {% if not m.name %}
                <h5 >{{ m.title }}</h5>
            {% else %}
                <h5 >{{ m.name }}</h5>
            {% endif %}
            <p >{{ m.overview }}</p>
            <a href="/{{ type }}/{{ m.id }}/" >View Details</a>
            </div>
        </div>
    {% endfor %}
</div>

CodePudding user response:

If I understand correctly, you should have imported context as a module. If so then the error arises because you are essentially trying to index a module in

context["movie"]

this is not supported in python. Say you are trying to store the movies in a 'movies' dictionary in the module, then what you should do is:

import context
...
context.movies["movie"] = movie_list

But I think the module would probably have a method returning the dictionary you need, then you can use:

import context
...
movies = context.some_method()
movies["movie"] = movie_list

Same for the tv list.

  • Related