Как просматривать фильмы в порядке убывания среднего балла? django
Что мы хотим достичь.
Я хочу отобразить оценку (звезды) фильма в порядке убывания.
Настоящее состояние
API tmdb используется для получения информации о фильмах. А модели movie и TV имеют только ID и stars(score). Отсюда, только те, у которых есть звезды, возвращаются в html.
Я хочу задать вопрос.
А если выбрана оценка, как сделать так, чтобы она отображалась в порядке убывания оценки? data = requests.get (f "https://api.themoviedb.org/3/tv/{tv_id}?api_key={TMDB_API_KEY}&language=en-US"). Теперь вы можете получить информацию о tv.
def index(request):
movie = reversed(Movie.objects.order_by('stars'))
tv = reversed(TV.objects.order_by('stars'))
context = {
"movie": movie,
"tv" : tv,
}
return render(request, 'Movie/index.html', context)
{% extends "base.html" %}
{% block content %}
<h2>Trending</h2>
<div class="input-group mb-3">
<select class="form-select" id="media_type">
<option selected>All Trending Media Types</option>
<option value="movie">All Trending Movies(day)</option>
<option value="tv">All Trending TV Shows(day)</option>
<option value="person">All Trending Persons(day)</option>
<option value="score">score</option>
</select>
</div>
<div id="trendings" class="row">
</div>
{% load static %}
<script src="{% static 'js/Movieindex.js' %}"></script>
{% endblock %}
fetchTrendingResults("all", "week")
var mediaType = document.getElementById("media_type")
mediaType.addEventListener("change", function(event) {
fetchTrendingResults(mediaType.options[mediaType.selectedIndex].value, "day")
})
function fetchTrendingResults(media_type, time_window) {
var trendingDiv = document.getElementById("trendings")
trendingDiv.innerHTML = ""
fetch(`/api/trendings?media_type=${media_type}&time_window=${time_window}`, {
method: "GET",
headers: {
"Content-Type": "application/json"
}}
// todo:movieとTVのIDをもらってこれをURLにFethして映画とTVの情報をそれぞれでスターが高い順に表示する。
)
.then(res => res.json())
.then(data => {
for (let i=0; i<data.results.length; i++) {
var mainDiv = document.createElement("div");
mainDiv.setAttribute("class", "card");
mainDiv.setAttribute("style", "width: 18rem;");
var img = document.createElement("img");
img.setAttribute("src", "https://image.tmdb.org/t/p/w200" + data.results[i].poster_path);
img.setAttribute("class", "card-img-top");
img.setAttribute("alt", "...");
var body = document.createElement("div");
body.setAttribute("class", "card-body");
var title = document.createElement("h5");
title.setAttribute("class", "card-title");
if (data.results[i].name) {
title.innerHTML = data.results[i].name;
} else {
title.innerHTML = data.results[i].title;
}
//var text = document.createElement("p");
//text.setAttribute("class", "card-text");
//text.innerHTML = data.results[i].overview;
var link = document.createElement("a");
link.setAttribute("href", "/" + data.results[i].media_type + "/" + data.results[i].id + "/");
link.setAttribute("class", "btn btn-primary");
link.innerHTML = "View Details";
body.appendChild(title);
//body.appendChild(text);
body.appendChild(link);
mainDiv.appendChild(img);
mainDiv.appendChild(body);
document.getElementById("trendings").appendChild(mainDiv);
}
})
}
У вас есть reversed()
, который обычно изменяет порядок списка - есть лучший способ сделать это с помощью order_by
и использования -
перед вашим полем, чтобы изменить, в каком порядке оно находится: возрастающем или убывающем:
tv = TV.objects.order_by('-stars')