.order_by('?')
get_queryset
class MoviesIndex(ListView):
model = Movie
context_object_name = 'movies'
template_name = 'movies/movies_index.html'
def get_queryset(self):
return Movie.objects.order_by('?')
get_random
{% for movie in movies %}
<a href="{% url 'movies_detail' movie.pk %}">
<img src="{{ movie.poster }}" class="img-fluid">
{% endfor %}
movie
movie_pks = list(Movie.objects.values_list('id', flat=True))
random.choice
pk
import random
print(random.choice(movie_pks))
注:
不要使用
random.randint
在你的情况下,因为如果一个物体
如果电影被删除,它将失败
此外,移除
while True:
从
GETX随机
方法,您不需要它,因为您总是会得到一个电影对象
@property
def get_random(self):
movie_pks = list(Movie.objects.values_list('id', flat=True))
pk = random.choice(movie_pks)
movie = Movie.objects.get(pk=pk)
return movie
不要打电话
GETX随机
模板使用2次
with
块
{% with rand_movie=movie.get_random %}
<a href="{% url 'movies_detail' rand_movie.pk %}">
<img src="{{ rand_movie.poster }}" class="img-fluid">
{% endwith %}