У меня есть несколько моделей постов, где ID - это UUID. Теперь я хочу отобразить несколько случайных предложений постов, которые пользователь также хотел бы видеть в моем шаблоне post_detail ...
Вот так я обрабатываю предложения постов, которые пользователь также может видеть в views.py:
def post_proposals():
post_elements = sorted(
chain(
Model1.objects.all(),
Model2.objects.all(),
Model3.objects.all()
)
)
post_elements_list = list(post_elements) # Conversion to list is requierd by random
post_proposals = random.sample(post_elements_list)
return post_proposals
def post_detail(request, pk):
...
args = {
'post': post,
'post_proposals': post_proposals(),
...
template. html:
{% for post_proposal in post_proposals %}
<h1>{{ post_proposal.title }}</h1>
{% endfor %}
Проблема сейчас в том, что это снизит производительность моей базы данных из моего понимания ... Как только у меня будет храниться много постов в моей базе данных запрос станет массовым. Сначала я должен получить все элементы 3 моделей, а затем получать 10 случайных записей из списка каждый раз, когда сообщение отображается для пользователя.
Я также обнаружил следующее, что представляется весьма полезным:
https://elpenia.wordpress.com/2010/05/11/getting-random-objects-from-a-queryset-in-django/
К сожалению, я не могу использовать это решение, так как работаю с UUID, которые являются непоследовательными строками, а не значениями int, которые у меня были бы с идентификаторами.