#django
#django
Вопрос:
Я загрузил вопросы в базу данных с выпадающими значениями, такими как PAPER1, PAPER2 и т. Д., На моей странице шаблона, если я нажму на PAPER1, я должен получить только вопросы PAPER1. Как получить такие данные? пожалуйста, помогите мне.
models.py:
class Questions(models.Model):
paper = models.CharField(max_length=10, default='None')
qs_no = models.IntegerField(default=None)
question = models.TextField(max_length=500)
option_a = models.CharField(max_length=100)
option_b = models.CharField(max_length=100)
option_c = models.CharField(max_length=100)
option_d = models.CharField(max_length=100)
ans = models.CharField(null=True, max_length=50)
forms.py:
PAPER_CHOICES = (
('default', 'None'),
('paper1','PAPER1'),
('paper2','PAPER2'),
('paper3','PAPER3'),
('paper4','PAPER4'),
('paper5','PAPER5'),
('paper6','PAPER6'),
('paper7','PAPER7'),
('paper8','PAPER8'),
('paper9','PAPER9'),
('paper10','PAPER10'),
)
class QuestionsForm(forms.ModelForm):
paper = forms.CharField(widget=forms.Select(choices = PAPER_CHOICES))
class Meta:
model=Questions
fields=[
'paper',
'qs_no',
'question',
'option_a',
'option_b',
'option_c',
'option_d',
'ans',
]
views.py:
def render_questions(request):
print(f'user in render_questions is {request.user.username}', flush=True)
if not request.user.is_authenticated:
return render(request, 'login.html')
else:
global exam_session
exam_session = ''.join(random.choice(string.ascii_uppercase string.digits) for _ in range(10))
print(f"session id in render ques is {exam_session}", flush=True)
questions = Questions.objects.all()
ques = []
qs_no = 1
for q in questions:
que = {}
que['qs_no'] = qs_no
qs_no = qs_no 1
que['question'] = q.question
que['id'] = q.id
que['option_a'] = q.option_a
que['option_b'] = q.option_b
que['option_c'] = q.option_c
que['option_d'] = q.option_d
ques.append(que)
print(f"ques: {ques}", flush=True)
return render(request, 'report.html', {'ques': ques})
template.html:
<form id="myform" name="myform" action="answer" method="POST">
{% csrf_token %}
<div class="questionContainer">
{% for question in ques %}
<div class="questiondiv" data-questionId="{{ question.id }}">
<div class="bghead1">
<h5><strong>Question amp;nbsp;amp;nbsp;{{ question.qs_no }}.</strong></h5>
</div>
<div class="font mrl">
<h5><input type="hidden" class="form-check-input" name="question" value="{{ question.question }}">{{ question.question }}</h5>
</div>
<div class="radio pad">
<label><input type="radio" class="form-check-input" name="question{{question.qs_no}}" value="{{question.option_a}}">amp;nbsp;amp;nbsp;amp;nbsp;A)amp;nbsp;amp;nbsp;{{ question.option_a }}</label>
</div>
<div class="radio pad">
<label><input type="radio" class="form-check-input" name="question{{question.qs_no}}" value="{{question.option_b}}">amp;nbsp;amp;nbsp;amp;nbsp;B)amp;nbsp;amp;nbsp;{{ question.option_b }}</label>
</div>
<div class="radio pad">
<label><input type="radio" class="form-check-input" name="question{{question.qs_no}}" value="{{question.option_c}}">amp;nbsp;amp;nbsp;amp;nbsp;C)amp;nbsp;amp;nbsp;{{ question.option_c }}</label>
</div>
<div class="radio pad">
<label><input type="radio" class="form-check-input" name="question{{question.qs_no}}" value="{{question.option_d}}">amp;nbsp;amp;nbsp;amp;nbsp;D)amp;nbsp;amp;nbsp;{{ question.option_d }}</label>
</div>
</div>
{% endfor %}
</div>
</form>
В этом шаблоне, если я нажму на paper1 и т. Д., Я должен получить вопросы, связанные с paper 1.
Papers.html:
<div class="container">
<table class="table">
<tbody>
<tr>
<td>RRB NTPC</td>
<td><a href=''>Mock Test Paper 1</a></td>
</tr>
<tr>
<td>RRB NTPC</td>
<td><a href=''>Paper 2</a></td>
</tr>
</tbody>
</table>
</div>
шаблон вопросов:
<form action="questions" method="POST">
{% csrf_token %}
<div class="container">
<h3>Upload Questions:</h3><br>
<div class="form-group row">
<div class="col-sm-4">
{{ form.as_p }}
<button type="submit">Upload</button>
</div>
</div>
</div>
</form>
Комментарии:
1. покажите шаблон с помощью QuestionsForm, вам нужно выполнить последующий вызов формы выбора бумаги, а затем перехватить идентификатор бумаги в серверной части и передать его в запрос фильтра вопросов
2. @danish_wani — Привет, я загрузил шаблон вопросов. Пожалуйста, проверьте и предложите. Спасибо
3. Поправьте меня, если я ошибаюсь, поэтому вы хотите, чтобы в этом шаблоне вопросов при выборе любого документа из выпадающего списка такие поля, как ‘qs_no’, ‘question’, ‘option_a’, ‘option_b’, ‘option_c’, ‘option_d’, ‘ans’, должны обновляться и показывать только вопросыпринадлежность к документу, выбранному в раскрывающемся списке
4. Да, вы правы, именно так мне и нужно. На основе выбранного выпадающего списка я должен получить вопросы, связанные с документом.
Ответ №1:
Вместо этого используйте бумажную форму:
forms.py
class PaperForm(forms.ModelForm):
paper = forms.CharField(widget=forms.Select(choices = PAPER_CHOICES))
paper.html
<form action="questions" method="POST">
{% csrf_token %}
<div class="container">
<h3>Upload Questions:</h3><br>
<div class="form-group row">
<div class="col-sm-4">
{{ form.as_p }}
<div id="questions_section">
{% include 'questions.html' %}
</div>
<button type="submit">Upload</button>
</div>
</div>
</div>
</form>
<script>
$('body').on('change', "select[name='paper']", function(){
$( "select[name='paper'] option:selected" ).each(function() {
paper = $( this ).val();
});
$.ajax({
type: "GET",
url: '/get_questions',
data: {'paper': paper},
success: function(response) {
$('#questions_section').html(response);
},
error: function() {
alert('Error occurred');
}
});
});
</script
questions.html
<ul>
{% for question_obj in questions %}
<li>
{{ forloop.counter }}. question_obj.question
</li>
<li>
<input type="radio" name="question_no" value="{{question_obj.qs_no}}">
<label>{{question_obj.option_a}}</label>
</li>
<li>
<input type="radio" name="question_no" value="{{question_obj.qs_no}}">
<label>{{question_obj.option_b}}</label>
</li>
<li>
<input type="radio" name="question_no" value="{{question_obj.qs_no}}">
<label>{{question_obj.option_c}}</label>
</li>
<li>
<input type="radio" name="question_no" value="{{question_obj.qs_no}}">
<label>{{question_obj.option_d}}</label>
</li>
{% endfor %}
</ul>
views.py
def get_questions(request):
if request.method == 'GET':
paper = request.GET.copy().get('paper')
context = dict()
if paper and Questions.objects.filter(paper=paper).exists:
context['questions'] = Questions.objects.filter(paper=paper)
return render(request, 'questions.html', context)