我正在編寫一個應用程序,允許人們比較不同的hashtags對。隨機化Django查詢集一次,然後遍歷它
型號:
class Competitors(models.Model):
tag1 = models.ForeignKey('Hashtag', related_name='+')
tag2 = models.ForeignKey('Hashtag', related_name='+')
votes = models.PositiveIntegerField(default=0, null=False)
查看:
def compare_hashes(request, i=None):
i = i or 0
try:
competitors = Competitors.objects.order_by('?')[i]
except IndexError:
return render(request, 'hash_to_hash.html',
{'tag1': '', 'tag2': '', i: 0, 'done': True})
if request.method == 'POST':
form = CompetitorForm(request.POST)
if form.is_valid():
if "yes" in request.POST:
competitors.votes += 1
competitors.save()
i += 1
return render(request, 'hash_to_hash.html',
{'tag1': competitors.tag1, 'tag2': competitors.tag2, i: i, 'done': False})
else:
return render(request, 'hash_to_hash.html',
{'tag1': competitors.tag1, 'tag2': competitors.tag2, i: i, 'done': False})
我想要做的是,每個訪客,隨機競爭對手對象的排序,然後通過隨機迭代名單。
問題:
- 什麼是隨機的事情除了Ø
bjects.order_by('?')
的更好的辦法?我正在使用MySQL,並且我在這裏看到了有關order_by('?')
+ MySQL = SLOOOOOOOW的一些事情。有幾個建議給出了,我可以很容易地實現一些東西(我正在考慮沿着random.shuffle(Competitors.objects.all())
的方向),但我不確定我在哪裏放置它,這導致我到第二個問題... - 我如何確保隨機化只發生一次?我不想讓人們一遍又一遍地重複同一對樂曲,而我不想讓一些樂曲隨機出現一次以上,從而甩掉我的結果。我希望每個人都看到相同的列表,只是按不同的順序。
我懷疑答案在於經理類,但實際上,這一切都歸結爲我對Django何時調用的知識缺乏瞭解。
(我也有一個問題,似乎結果不被保存得到我的分貝,但這是一個不同的,可能更容易解決,問題)。