python - 为什么我的 ModelChoiceField 显示三个表单而不是两个表单,为什么它不读取我的选择?
问题描述
首先,我将两个模型表单融合到一个表单中,它们应该显示主题名称和问题类型,但由于某种原因,出现了三个表单,第一个没有显示第二个出现的选项两次,我不希望第二次出现,因为我的 CSS 没有应用在它上面。
- 选择没有出现。
- 三种形式而不是两种形式。
这是我的model.py
from django.db import models
from home.choices import *
# Create your models here.
class Topic(models.Model):
topic_name = models.IntegerField(
choices = question_topic_name_choices, default = 1)
def __str__(self):
return '%s' % self.topic_name
class Image (models.Model):
image_file = models.ImageField()
def __str__(self):
return '%s' % self.image_file
class Question(models.Model):
questions_type = models. IntegerField(
choices = questions_type_choices, default = 1)
question_topic = models.ForeignKey( 'Topic',
on_delete=models.CASCADE,
blank=True,
null=True)
question_description = models.TextField()
question_answer = models.ForeignKey( 'Answer',
on_delete=models.CASCADE,
blank=True,
null=True)
question_image = models.ForeignKey( 'Image',
on_delete=models.CASCADE,
blank=True,
null=True)
def __str__(self):
return '%s' % self.question_description
class Answer(models.Model):
answer_description = models.TextField()
answer_image = models.ForeignKey( 'Image',
on_delete=models.CASCADE,
blank=True,
null=True)
def __str__(self):
return '%s' % self.answer_description
这是我的forms.py
from django import forms
from betterforms.multiform import MultiModelForm
from .models import Topic, Image, Question, Answer
from .choices import questions_type_choices, question_topic_name_choices
class TopicForm(forms.ModelForm):
topic_name = forms.ModelChoiceField(
queryset = Topic.objects.all(),
widget = forms.Select(
choices=(question_topic_name_choices),
attrs = {'class': 'home-select-one'}
))
class Meta:
model = Topic
fields = ['topic_name',]
class QuestionForm(forms.ModelForm):
question_type = forms.ModelChoiceField(
queryset = Topic.objects.all(),
widget = forms.Select(
choices=(questions_type_choices),
attrs = {'class': 'home-select-two'}
))
class Meta:
model = Question
fields = ['questions_type',]
class QuizMultiForm(MultiModelForm):
form_classes = {
'topics':TopicForm,
'questions':QuestionForm
}
def save(self, commit=True):
objects = super(QuizMultiForm, self).save(commit=False)
if commit:
topic_name = objects['topic_name']
topic_name.save()
question_type = objects['question_type']
question_type.topic_name = topic_name
question_type.save()
return objects
这是我的views.py
from django.shortcuts import render, render_to_response
from django.views.generic import CreateView
from home.models import Topic, Image, Question, Answer
from home.forms import QuizMultiForm
def QuizView(request):
if request.method == "POST":
form = QuizMultiForm(request.POST)
if form.is_valid():
pass
else:
form = QuizMultiForm()
return render(request, "index.html", {'form': form})
这是choices.py
question_topic_name_choices = (
(1, ("Topic #1: Measurements and Uncertainties")),
(2, ("Topic #2: Mechanics")),
(3, ("Topic #3: Thermal Physics")),
(4, ("Topic #4: Waves")),
(5, ("Topic #5: Electricity and Magnetism")),
(6, ("Topic #6: Circular Motion and Gravitation")),
(7, ("Topic #7: Atomic, Nuclear and Particle Physics")),
(8, ("Topic #8: Energy Production")),
(9, ("Topic #9: Wave Phenomena (HL Only)")),
(10, ("Topic #10: Fields (HL Only)")),
(11, ("Topic #11: Electromagnetic Induction (HL Only)")),
(12, ("Topic #12: Quantum and Nuclear Physics (HL Only)")),
(13, ("Option A: Relativity")),
(14, ("Option B: Engineering Physics")),
(15, ("Option C: Imaging")),
(16, ("Option D: Astrophysics"))
)
questions_type_choices = (
(1, ("Multiple Choice Questions")),
(2, ("Problem Solving Questions")))
这是模板
{% extends 'base.html' %}
{% block content %}
<form method="POST">
{% csrf_token %}
{{ form.as_p }}
<button type="submit" id="home-Physics-time-button">It is Physics Time</button>
</form>
{% endblock content %}
谢谢你的帮助!
解决方案
您的选择配置不正确。去掉右边多余的()。
questions_type_choices = (
(1, "Multiple Choice Questions"),
(2, "Problem Solving Questions")
)
左边存储在数据库中,右边显示在表格中。
推荐阅读
- machine-learning - 如何访问 FastText 分类器管道?
- python - 即使它的数据超出范围,如何设置绘图的 xtick 范围?
- node.js - 在 Node JS 中将 JSON 转换为 CSV
- python-3.x - (Python)如何替换.txt文件中特定行中的某个子字符串,同时保留其他内容而不覆盖它
- rasa - ModuleNotFoundError:没有名为“rasax”的模块
- python - Sphinx 文档 - 从 Markdown 文件将图像添加到文档中
- javascript - 如何禁用 Flexbox 的内联
- python - Numpy迭代所有维度,但最后一个维度未知
- javascript - javascript:打开下拉菜单时不会触发点击事件
- python - 无法使用 time_major 格式创建 TFLite 模型