Как взаимодействовать с БД с помощью кнопки на Django, когда ваш «элемент» меняется каждые refre sh (Python) - PullRequest
0 голосов
/ 06 августа 2020

Я ищу способ изменить «элемент» (тот, который отображается на странице) в БД. Но сначала у меня на странице должно быть 2 кнопки. И во-вторых, показанный «элемент» случайным образом взят из БД. Итак, проблема заключается в следующем: как я могу изменить информацию об элементе в БД, зная, что кнопка обновит sh страницу для отправки ее в запросе. (Я напоминаю вам, что мой элемент случайный, поэтому меняйте каждое refre sh)

Итак, мне нужен способ изменить его или способ рандомизировать страницу, но не когда я отправляю запрос POST

My views.py: (Грязно, но все в порядке xD)

def review(request):
    loop = True
    i = 0
    while loop and i < len(Cartes.objects.filter(user_id_shared_id__exact=request.user.id).values_list('pk', flat=True))*4:
        i = i + 1
        pks = Cartes.objects.filter(user_id_shared_id__exact=request.user.id).values_list('pk', flat=True)
        if len(pks) == 0:
            loop = False
            return redirect('/create/')
        random_pk = choice(pks)
        card = Cartes.objects.get(pk=random_pk)
        obj, created = Review.objects.get_or_create(
            card_id_id=card.id,
            user_id_id=request.user.id,
        )
        print(card.id, "///", obj.id)
        date_3_days = obj.review_date + datetime.timedelta(days=3)
        date_7_days = obj.review_date + datetime.timedelta(days=7)
        date_21_days = obj.review_date + datetime.timedelta(days=21)
        date_42_days = obj.review_date + datetime.timedelta(days=42)
        if obj.review_level == 1:
            loop = False
        elif obj.review_level == 2 and datetime.date.today() >= date_3_days:
            loop = False
        elif obj.review_level == 3 and datetime.date.today() >= date_7_days:
            loop = False
        elif obj.review_level == 4 and datetime.date.today() >= date_21_days:
            loop = False
        elif obj.review_level == 5 and datetime.date.today() >= date_42_days:
            loop = False
        else:
            loop = True

    if request.method=='POST' and 'btnform1' in request.POST:
        print(card.id)
        obj.review_level = 1
        obj.review_date = datetime.date.today()
        obj.save()
        return redirect('review')
    else:
        pass

    if request.method=='POST' and 'btnform2' in request.POST:
        print(card.id)
        obj.review_date = datetime.date.today()
        if obj.review_level != 5:
            obj.review_level = obj.review_level + 1
        obj.save()
        return redirect('review')
    else:
        pass

    context = {'card':card}
    return render(request, 'card/review.html', context)

Мой шаблон:

<body>
    <div class="page">
        <h1>{{ card.title }}</h1>
        <div class="carte">
            <p> {{ card.content }} </p>
            <form method='POST'>
                {% csrf_token %}
                {{form1.as_p}}
                <button type="submit" name="btnform1" value={{obj}}>Je n'ai pas trouvé :'c</button>
            </form>
                <form method='POST'>
                {% csrf_token %}
                {{form2.as_p}}
            <button type="submit" name="btnform2">J'ai trouvé !</button>
            </form>
        </div>
    </div>
</body>

1 Ответ

0 голосов
/ 07 августа 2020

Я нашел способ: создать буферную страницу, где она будет случайной. Затем перенаправьте на страницу, где вы хотите отобразить то, что вы рандомизировали. Вы можете сделать это с динамическим c url.

для перенаправления используйте его вот так

return redirect ('review', myUrlArg = viewArg)

Надеюсь, что это возможно помочь кому-нибудь

...