django - Django:选择多个字段值并将它们添加到数据库中
问题描述
我正在开发一个 django 项目,我必须在其中创建试卷并向其添加问题。
我需要帮助来创建一个视图,在该视图中,对于特定考试,我首先选择主题和章节,提交后我得到所有与它们相关的问题作为复选框选择多个值并为每个问题输入标记。
我已经使用SimpleIsBetterThanComplex创建了一个依赖下拉列表,但这让我一次只添加我不喜欢的问题。
请任何人提供解决方案或提示我如何实现它。提前致谢。
模型.py
from questions.models import Question, Subject, Chapter
class SubjectiveName(models.Model):
name = models.CharField(max_length=200)
date = models.DateField(default=date.today)
for_class = models.PositiveSmallIntegerField(
validators=(
MinValueValidator(1),
MaxValueValidator(12),
)
)
PART = (
("A", "A"),
("B", "B"),
("C", "C"),
("D", "D"),
("E", "E"),
)
part = models.CharField(max_length=1, choices=PART, null=True,
blank=True)
max_marks = models.PositiveSmallIntegerField()
def marks_added(self):
sum = 0
for question in self.subjective.all():
sum += question.marks
return sum
def __str__(self):
return self.name
def get_absolute_url(self):
return urls.reverse("subjective:detail", args=(str(self.pk)))
def get_chapters(self):
chapters = {}
for question in self.subjective.all():
chapter = question.questions.chapter
chapters[chapter] = chapters.get(chapter, 0) + 1
return chapters
class SubjectiveQuestions(models.Model):
exam = models.ForeignKey(SubjectiveName, on_delete=models.CASCADE,
related_name="subjective")
subject = models.ForeignKey(Subject, on_delete=models.CASCADE)
chapter = models.ForeignKey(Chapter, on_delete=models.CASCADE)
questions = models.ForeignKey(Question, on_delete=models.SET_NULL,
null=True)
marks = models.PositiveSmallIntegerField(blank=True, null=True,
help_text="If adding a question- leave blank to assign the default
marks")
def __str__(self):
return self.questions.question
def get_absolute_url(self):
return urls.reverse("subjective:detail", args=(str(self.exam_id)))
视图.py
from .forms import SubjectiveQuestionForm
from questions.models import Chapter, Question
class SubjectiveQuestionsCreateView(gn.edit.CreateView):
model = md.SubjectiveQuestions
form_class = SubjectiveQuestionForm
template_name = "subjective/new_question.html"
def form_valid(self, form):
form.instance.exam_id = self.kwargs.get("pk")
if not form.instance.marks:
form.instance.marks = form.instance.questions.marks
return super(SubjectiveQuestionsCreateView,self).form_valid(form)
处理ajax请求。
def load_questions(request):
subject_id = request.GET.get("subject")
chapter_id = request.GET.get("chapter")
if subject_id and not chapter_id:
questions = Question.objects.filter(subject_id=subject_id)
return render(request, "subjective/questions_dropdown_list.html", {
"questions": questions
})
elif chapter_id:
questions = Question.objects.filter(subject_id=subject_id, chapter_id=chapter_id)
return render(request, "subjective/questions_dropdown_list.html", {"questions": questions}
def load_chapters(request):
subject_id = request.GET.get("subject")
question_id = request.GET.get("question")
if not question_id:
chapters = Chapter.objects.filter(subject_id=subject_id)
return render(request, "subjective/chapters_dropdown_list.html", {"chapters": chapters})
elif question_id:
chapter = Question.objects.get(pk=question_id).chapter
chapters = Chapter.objects.exclude(name=chapter).filter(subject_id=subject_id)
return render(request, "subjective/chapters_dropdown_list.html", {"chapter": chapter, "chapters": chapters})
表格.py
from .models import SubjectiveQuestions
from questions.models import Chapter, Question
class SubjectiveQuestionForm(forms.ModelForm):
class Meta:
model = SubjectiveQuestions
fields = "subject", "chapter", "questions", "marks"
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.fields["chapter"].queryset = Chapter.objects.none()
self.fields["questions"].queryset = Question.objects.none()
if "subject" in self.data:
try:
subject_id = int(self.data.get("subject"))
chapter_id = int(self.data.get("chapter"))
self.fields["chapter"].queryset = Chapter.objects.filter(subject_id=subject_id)
self.fields["questions"].queryset = Question.objects.filter(subject_id=subject_id, chapter_id=chapter_id)
except (ValueError, TypeError):
pass
解决方案
推荐阅读
- c# - Unity 将游戏对象转移到另一个场景
- python - 从 digist 和 alpha 生成字符串
- xamarin.android - 无法垂直居中 ImageButton
- python - Python:从文件中读取包括 \n \t。问题是我的文件也有 \n \t 作为文本的一部分
- validation - 方法 requestClass::validate 不存在。如何调用正确的提供者?
- javascript - 单击按钮后如何删除 eventListener?
- c# - PauseMenu - FPS 相机在 PauseMenu 中仍然移动
- sqlite - 我将如何返回表中所有行的计数,然后返回每次找到特定状态的计数?
- ios - 将 sms.db sql 数据库从 iOS 10 合并/迁移到 iOS 12
- javascript - 如何将搜索框值添加到 URL