Как отсортировать фильмы в соответствии с их звездным рейтингом и отфильтровать фильмы с рейтингом ниже заданного порога
Я хочу сортировать фильмы по их звездным рейтингам и фильтровать фильмы с рейтингом ниже заданного порога. Я хочу сортировать информацию о фильмах и телевизорах в порядке убывания по звездам, осуществлять поиск по каждому ID и выводить данные в формате data.json и socre. Однако я получаю ошибку '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 class="row">
{% for m in movie.results %}
<div class="card" style="width: 18rem;">
<img src="https://image.tmdb.org/t/p/w200{{ m.poster_path }}" class="card-img-top" alt="...">
<div class="card-body">
{% if not m.name %}
<h5 class="card-title">{{ m.title }}</h5>
{% else %}
<h5 class="card-title">{{ m.name }}</h5>
{% endif %}
<p class="card-text">{{ m.overview }}</p>
<a href="/{{ type }}/{{ m.id }}/" class="btn btn-primary">View Details</a>
</div>
</div>
{% endfor %}
</div>
<h1>TV Score_by</h1>
<div class="row">
{% for m in tv.results %}
<div class="card" style="width: 18rem;">
<img src="https://image.tmdb.org/t/p/w200{{ m.poster_path }}" class="card-img-top" alt="...">
<div class="card-body">
{% if not m.name %}
<h5 class="card-title">{{ m.title }}</h5>
{% else %}
<h5 class="card-title">{{ m.name }}</h5>
{% endif %}
<p class="card-text">{{ m.overview }}</p>
<a href="/{{ type }}/{{ m.id }}/" class="btn btn-primary">View Details</a>
</div>
</div>
{% endfor %}
</div>
Если я правильно понимаю, вы должны были импортировать context
как модуль. Если это так, то ошибка возникает потому, что вы пытаетесь проиндексировать модуль в
context["movie"]
это не поддерживается в python. Допустим, вы пытаетесь хранить фильмы в словаре 'movies' в модуле, тогда вы должны сделать следующее:
import context
...
context.movies["movie"] = movie_list
Но я думаю, что модуль, вероятно, будет иметь метод, возвращающий нужный вам словарь, тогда вы сможете использовать:
import context
...
movies = context.some_method()
movies["movie"] = movie_list
То же самое для списка телеканалов.