Получение следующего элемента в наборе запросов - PullRequest
0 голосов
/ 19 октября 2019

Вот фрагмент из веб-проекта Voting, и я пытаюсь получить следующую категорию после голосования ...

Когда пользователь успешно проголосовал, я хочу, чтобы страница была перенаправлена ​​в следующую категорию. Я сделал, чтобы получить идентификатор этой категории, а затем сохранить переменную как next_category с идентификатором исходной категории, увеличенным на единицу (next_category = category.id + 1).

Но, как вы знаете, Django нене делайте идентификаторы строго последовательно, поэтому, если я ранее удалил категорию, скажем, cat 5, и у меня есть cat1, cat2 подумал о cat10, когда он доберется до cat4, у него будут проблемы

Представление Nominees даетстраница для определенной категории и вид голосования - это вид обработки формы. Надеюсь, это достаточно объяснительно.

@login_required
def Nominees(request, category_id):
    categories = Category.objects.get(id=category_id)
    next_category = categories.id +1
    college_id = categories.College.id
    if lastday < today:
        messages.info(request, "Window closed")
    context = {'categories':categories, 'college_id':college_id, 'lastday':lastday, 'today':today,'next_category':next_category}
    return render(request, 'nomination/contestants.html', context )

def Voting(request):
    if request.method == "POST": 
        vote_user = request.POST.get('vote_user')
        vote_contestant = request.POST.get('vote_contestant')
        vote_category = request.POST.get('vote_category')
        next_category = request.POST.get('next_cat')
        vote_college = request.POST.get('vote_college')
        college = College.objects.get(pk=int(vote_college))
        college_id = college.id
        nex = int(next_category)-1
        try:
            Vote.objects.filter(user_id=request.user.id, category_id=vote_category)[0]
            messages.error(request, "You've already voted")
            return HttpResponseRedirect(reverse('nomination:nominees', args=(vote_category,)))
        except(IndexError, Vote.DoesNotExist):
            if lastday < today:
                messages.error(request, "Too late")
                return HttpResponseRedirect(reverse('nomination:nominees', args=(vote_category,)))
            else:
                new_vote = Vote(contestant_id=vote_contestant, category_id=vote_category, college_id=vote_college, user_id=vote_user)
                new_vote.save()
                messages.success(request, "Successfully voted!!")
                try:
                    categories = college.category_set.filter(id=next_category, College_id=college_id)[nex]
                    category_id=categories.id
                    return HttpResponseRedirect(reverse('nomination:nominees', args=(category_id,)))
                except (IndexError, Category.DoesNotExist):
                    categories = college.category_set.first()
                    category_id = categories.id
                    return HttpResponseRedirect(reverse('nomination:categories', args=(college_id,)))

Я также был бы признателен, если бы смог найти лучший способ сделать это, например, использовать следующую функцию, которую я пробовал, но тем не менее она вызывает у меня проблемы.

...