다른 해시 태그 쌍을 비교할 수있는 앱을 작성하고 있습니다.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('?')
O 이외의 일을 무작위의 더 나은 방법은 무엇
- ? 저는 MySQL을 사용하고 있는데, 여기에 대해서는 어떻게 보입니까
order_by('?')
+ MySQL = SLOOOOOOOW. 두 가지 제안이 있었고 쉽게 구현할 수있었습니다 (나는random.shuffle(Competitors.objects.all())
의 라인을 따라 생각하고있었습니다). 그러나 두 번째 질문으로 안내하는 곳을 어디에 놓을 지 확신하지 못했습니다. - 랜덤 화가 한 번만 발생하는지 어떻게 확인합니까? 나는 사람들에게 같은 쌍을 반복해서 검토하게함으로써 사람들을 지루하게하고 싶지 않고, 어떤 쌍이 무작위로 한 번 이상 나타남으로써 결과를 포기하고 싶지 않습니다. 다른 사람들과 똑같은 목록을 모든 사람들이 볼 수 있기를 바랍니다.
나는 대답이 Manager 클래스에 있다고 생각하지만 실제로 이것은 장고가 호출 할 때 내 지식이 부족하다는 것을 의미합니다.
는 (나는 또한 결과 내 DB에 저장하기 것 같지 않는 문제가있어,하지만 다른, 아마 더 쉽게 해결, 문제입니다.)