使用单个提交在Django键中存储值列表
我可以在视图.py中获得所有字段的值,如下所示使用单个提交在Django键中存储值列表,django,django-views,Django,Django Views,我可以在视图.py中获得所有字段的值,如下所示 if request.method == 'POST': teacher_get = request.POST.get('teacher') department_get = request.POST.get('department') subject_get = request.POST.get('subject') semester_get = request.POST.get('semester') a
if request.method == 'POST':
teacher_get = request.POST.get('teacher')
department_get = request.POST.get('department')
subject_get = request.POST.get('subject')
semester_get = request.POST.get('semester')
answers = [v for q, v in request.POST.items() if q.startswith('question_')]
现在我想将这些值存储在Student类中,它的大多数字段都是外键
class Student(models.Model):
teacher = models.ForeignKey(Teacher, on_delete=models.CASCADE)
question = models.ForeignKey(Question, on_delete=models.CASCADE)
subject = models.ForeignKey(Subject, on_delete=models.CASCADE)
department = models.ForeignKey(Department, on_delete=models.CASCADE)
semester = models.ForeignKey(Semester, on_delete=models.CASCADE)
answer = models.SmallIntegerField(choices=RATING_CHOICES, default=1)
例如,学生登录表单页面并开始回答问题,最后单击提交按钮时,所有问题都有答案。换句话说,在提交之后,我有15个学生对象,每个对象都属于一个特定的问题。
我的表单如下所示:
<form action="{% url 'question'%}" method="POST">
{% csrf_token %}
<select name="teacher">
{% for teacher in teacher %}
<option value="{{ teacher.name }}">{{ teacher.name }}</option>
{% endfor %}
</select>
</div>
<div>
<select name="department">
{% for department in department %}
<option value="{{ department.name }}">{{ department.name }}</option>
{% endfor %}
</select>
</div>
<div>
<select name="semester">
{% for semester in semester_choices %}
<option value="{{ semester.0 }}">{{ semester.1 }}</option>
{% endfor %}
</select>
</div>
<div>
<select name="subject">
{% for subject in subject %}
<option value="{{ subject.name }}">{{ subject.name }}</option>
{% endfor %}
</select>
</div>
{% for question in question %}
<ol>{{ question.question }}</ol>
{% for choice in rating_choices %}
<input type="radio" name="question_{{question.id}}" value="{{choice.0}}">{{choice.1}}
{% endfor %}
{% endfor %} <br>
<input type="submit" value="Vote">
</form>
{%csrf_令牌%}
{teacher%中的教师为%s}
{{teacher.name}
{%endfor%}
{部门%中的部门为%}
{{department.name}
{%endfor%}
{学期中的学期百分比\u选项%}
{{学期1}}
{%endfor%}
{主题%中的主题为%s}
{{subject.name}
{%endfor%}
{问题%%的百分比}
{{question.question}}
{评分中的选项为%_choices%}
{{choice.1}}
{%endfor%}
{%endfor%}
我尝试在对象(Teacher.objects.create(name=Teacher\u get))中分配存储的值,这导致在Teacher类中创建一个新对象
您可以创建Django模型表单,然后使用它存储数据:
# form
from django.forms import ModelForm
from .models import Student
class StudentForm(ModelForm):
class Meta:
model = Student
fields = '__all__'
# view
if request.method == 'POST':
form = StudentForm(request.POST)
if form.is_valid():
form.save()
但您需要在表单的html模板中进行一些更改,以将value
的属性更改为相应模型的主键:
<select name="teacher">
{% for teacher in teacher %}
<option value="{{ teacher.pk }}">{{ teacher.name }}</option>
{% endfor %}
</select>
</div>
<div>
<select name="department">
{% for department in department %}
<option value="{{ department.pk }}">{{ department.name }}</option>
{% endfor %}
</select>
</div>
<div>
<select name="semester">
{% for semester in semester_choices %}
<option value="{{ semester.pk }}">{{ semester.1 }}</option>
{% endfor %}
</select>
</div>
<div>
<select name="subject">
{% for subject in subject %}
<option value="{{ subject.pk }}">{{ subject.name }}</option>
{% endfor %}
</select>
</div>
{teacher%中的教师为%s}
{{teacher.name}
{%endfor%}
{部门%中的部门为%}
{{department.name}
{%endfor%}
{学期中的学期百分比\u选项%}
{{学期1}}
{%endfor%}
{主题%中的主题为%s}
{{subject.name}
{%endfor%}
有关更多信息,请查看