Найти - Пользователи
Полная версия: Вопрос по форама
Начало » Django » Вопрос по форама
1
stas90
Всем привет!

Делаю простенький сайт, если это можно так назвать с английскими словами.
Идея такая: добавляется слово, перевод. Потом переходим в режим тест и тут два варианта на которых я споткнулся:

Выводится английское слово и textfield для русского слова, человек вводит русское слово, если оно введено верно - подается следующее слово. Слова выбираются рандомно.
Устроено так: если request.method != POST -> из views в temlate выдается переменная word,
отображается как Label, и при вводе слова в textfield оно возвращается во views.
Вопрос, как можно теперь проверить правильно ли введено слово?
Можно ли как-то передать значение index списка в template и потом обратно во views?

И еще вопрос, можно ли сделать свою форму вроде такой:
англ слово (label) - нужно ввести перевод
нужно ввести англ слово - русское слово (label)
нужно ввести англ слово - русское слово (label)
англ слово (label) - нужно ввести перевод
Как потом отправить эти результаты во views и проверить правильность


 def learn(request):
    words = {}
    words = Words.objects.all()
   
    randIndex = 0
    randIndex=random.randint(0, times - 1)
    word = ""
    if request.method == "POST":
        form = SearchForm(request.POST)
        if form.is_valid():
            checkWords=form.save(commit=False)
            
            
            return render(request, 'index/learn.html', {'checkWords':checkWords, 'rand':rand, 'randIndex':randIndex, 'form':form, 'words':words})
       
    else:
        form = SearchForm()
        word = words[randIndex]
        print (word)
    return render(request, 'index/learn.html', {'form':form, 'word':word})

Спасибо за ответы, прошу сильно не пинать, я новичок.

Для наглядности: http://isnot.ru/
FishHook
stas90
Можно ли как-то передать значение index списка в template и потом обратно во views?
Не надо оперировать индексами, надо оперировать Id записи.
FishHook
stas90
Как потом отправить эти результаты во views и проверить правильность
Что значит “отправить результаты во views”. Ваша форма обрабатывается внутри представления, именно там вы создаете объект этой формы. Просто работайте с этим объектом, не надо никуда ничего передавать.
stas90
FishHook
Не надо оперировать индексами, надо оперировать Id записи.
А как это сделать?

Может быть мне нужно использовать hidden input?

В froms.py добавил
 class SearchForm(forms.ModelForm):
    secretWord = forms.CharField(widget=forms.HiddenInput(), required=False)
    class Meta: 
        model = Words 
        fields = ('russ','secretWord',)

в learn.html:
 <form method="POST" align="center"> {% csrf_token %}
{{ form.non_field_errors }}
<div class="fieldWrapper">
{{ form.russ.errors }}
<label for="{{ form.russ.id_for_lable }}"> {{ word }} - </label>
{{ form.russ }}
<input type="hidden" id="id_secretWord" name="secretWord" value={{word}}></input>
<button type="submit">Check</button>
</div>
</form>
{{ checkWords.russ }}
{{ checkWords.secretWord }}


но почему-то secretWord все равно получить не могу
FishHook
stas90
А как это сделать?
Ну блин, у каждой записи в БД есть уникальный идентификатор Id, которому точно будет соответствовать одно слово в вашем словаре. Извлечь из БД слово и сравнить с тем, что ввел юзер. Что конкретно вам тут непонятно?
stas90
Не подскажите, почему secretWord не отображается после отправки введеной формы ?
stas90
С secretWord разобрался, оно не отображалось, т.к. не было добавлено в модель, было добавлено только в forms.py
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB