Итак, у меня есть эти две модели
class Question(models.Model):
question_image = models.ImageField(upload_to="Questions/images", default="")
subject = models.CharField(max_length=100)
topic = models.CharField(max_length=100)
type = models.CharField(max_length=100)
exam_type = models.CharField(max_length=100)
date_asked = models.DateField(default="")
class Option(models.Model):
question_id = models.ForeignKey(Question, on_delete=models.CASCADE)
text = models.CharField(max_length=100)
text.null = True
text.blank = True
option_image = models.ImageField(upload_to="Options/images", default="")
option_image.null =True
option_image.blank =True
is_correct = models.BooleanField()
Вы видите, что вопрос имеет одну-две взаимосвязи с опциями. Теперь я хочу добавить вопрос и соответствующий этому вопросу несколько опций в таблице опций. Поэтому, если вопрос с идентификатором = 1 будет иметь несколько вариантов в таблице параметров с параметром question_id = 1.
Итак, я сделал эти две формы
from django import forms
from practice.models import Question
from practice.models import Option
from django.forms import ModelForm
class QuestionForm(ModelForm):
class Meta:
model = Question
fields = ['question_image', 'subject', 'topic', 'type' , 'exam_type' , 'date_asked']
class OptionForm(ModelForm):
class Meta:
model = Option
fields = ['text' , 'option_image' , 'is_correct']
Теперь в шаблоне HTML в Я хочу добавить столько опций, сколько захочу, поэтому я написал этот HTML код. Код javascript, необходимый для добавления дополнительных опций, еще не готов, но вы поймете, что у меня будет несколько опционных форм и одна форма вопроса. Посмотрите на HTML ниже, а пока просто давайте две опции формы.
{% extends "users/base.html" %}
{% load crispy_forms_tags %}
{% block content %}
<div class="container">
<div class="content-section">
<form method="POST" enctype="multipart/form-data">
{% csrf_token %}
<fieldset class="form-group">
<legend class="border-bottom mb-4">Add Question</legend>
{{ q_form|crispy }}
<h4 class="border-bottom mb-4 pdb-2" style="padding-bottom : 1rem;">Options
<button type="button" class="add-btn btn btn-success">+ Add Options</button>
</h4>
<div class="container text-left" id="option-list">
<div class="row">
<div class="col-lg-4 col-xl-4 col-md-4 col-sm-12">
{{ o_form.text| as_crispy_field }}
</div>
<div class="col-lg-4 col-xl-4 col-md-4 col-sm-12">
{{ o_form.option_image| as_crispy_field }}
</div>
<div class="col-lg-4 col-xl-4 col-md-4 col-sm-12">
{{ o_form.is_correct| as_crispy_field }}
</div>
</div>
<div class="row">
<div class="col-lg-4 col-xl-4 col-md-4 col-sm-12">
{{ o_form.text| as_crispy_field }}
</div>
<div class="col-lg-4 col-xl-4 col-md-4 col-sm-12">
{{ o_form.option_image| as_crispy_field }}
</div>
<div class="col-lg-4 col-xl-4 col-md-4 col-sm-12">
{{ o_form.is_correct| as_crispy_field }}
</div>
</div>
</div>
</fieldset>
<div class="form-group">
<button class="btn btn-outline-info" type="submit">Add Question</button>
</div>
</form>
</div>
</div>
{% endblock content %}
Это мои views.py
from django.shortcuts import render,redirect
from django.http.response import HttpResponse
from .forms import QuestionForm , OptionForm
def add(request):
q_form = QuestionForm()
o_form = OptionForm()
if request.method == 'POST':
u_form = QuestionForm(request.POST, request.FILE)
o_form = OptionForm(request.POST,
request.FILE,
instance=request.question)
if u_form.is_valid() and o_form.is_valid():
u_form.save()
p_form.save()
print("everthing saved")
return redirect('index')
else:
print("not saved")
return redirect('index')
else:
q_form = QuestionForm()
o_form = OptionForm()
context = {
'q_form' : q_form,
'o_form' : o_form
}
return render(request,'add_question/add.html' , context)
ТАК у меня вопрос, как мне добавить несколько опций к одному и тому же идентификатору вопроса. И как мне передать идентификатор вопроса или экземпляр вопроса в форму параметров, чтобы он знал, какой вопрос я имею в виду, чтобы добавить параметр. Я хочу добавить несколько вариантов для одного вопроса, как я могу это сделать.
Спасибо за помощь заранее!