此QueryDict实例是不可变的(正在尝试手动设置表单数据)



当我去保存时。我不允许。我正试图通过手动输入表格将详细信息添加到数据库中。我正在努力将数据输入到表格中,以便保存它。

例如,我试图获取表单数据,然后设置我希望设置的数据,但我猜这是不正确的?我找不到手动设置表单数据的命令。这可能吗?

查看

from telnetlib import LOGOUT
from django.shortcuts import redirect, render
from django.http import HttpResponse
from matplotlib import use
from matplotlib.pyplot import get
from matplotlib.style import context
from werkzeug import Request
from .models import Account, Question, sni, Option
from django.contrib.auth.hashers import make_password, check_password
from django.contrib.auth.forms import UserCreationForm
from django.contrib import messages
from django.contrib.auth import authenticate, logout
from django.contrib.auth import login as dj_login
from django.forms import ModelForm, forms
from django.contrib.auth.decorators import login_required
from .forms import AccountAuthenticationForm, SNIForm, createUserForm, resultForm

def question_detail(request, id ='default'):
question = Question.objects.get(QuestionsID = id)
options = Option.objects.filter(QuestionsID = question)
if request.method == 'POST':
current_user = request.user
form = resultForm(request.POST)
form.data['userID'] = current_user.userID
form.data['QuestionsID'] = id
optionID = request.POST.get('result')
form.data['ChosenOptionID'] = optionID
if form.is_valid:
form.save()

messages.success(request, "Answer Submitted")
return redirect('dashboardPage')
context = {'question' : question,
'options' : options}


return render(request, 'questionForm.html', context)

html用于表单

<!DOCTYPE html>
<html>

<head>
<title>Login</title>
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/css/bootstrap.min.css" integrity="sha384-MCw98/SFnGE8fJT3GXwEOngsV7Zt27NXFoaoApmYm81iuXoPkFOJwJ8ERdknLPMO" crossorigin="anonymous">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.6.1/css/all.css" integrity="sha384-gfdkjb5BdAXd+lj+gudLWI+BXq4IuLW5IT+brZEZsLFm++aCMlF1V92rMkPaX4PP" crossorigin="anonymous">


<style>
body,
html {
margin: 0;
padding: 0;
height: 100%;
background: #7abecc !important;
}
.user_card {
width: 350px;
margin-top: auto;
margin-bottom: auto;
background: #74cfbf;
position: relative;
display: flex;
justify-content: center;
flex-direction: column;
padding: 10px;
box-shadow: 0 4px 8px 0 rgba(0, 0, 0, 0.2), 0 6px 20px 0 rgba(0, 0, 0, 0.19);
-webkit-box-shadow: 0 4px 8px 0 rgba(0, 0, 0, 0.2), 0 6px 20px 0 rgba(0, 0, 0, 0.19);
-moz-box-shadow: 0 4px 8px 0 rgba(0, 0, 0, 0.2), 0 6px 20px 0 rgba(0, 0, 0, 0.19);
border-radius: 5px;

}

.form_container {
margin-top: 20px;
}

#form-title{
color: #fff;

}
#questionTitle {
text-align: left;
}

.login_btn {
width: 100%;
background: #33ccff !important;
color: white !important;
}
.login_btn:focus {
box-shadow: none !important;
outline: 0px !important;
}
.login_container {
padding: 0 2rem;
}
.input-group-text {
background: #f7ba5b !important;
color: white !important;
border: 0 !important;
border-radius: 0.25rem 0 0 0.25rem !important;
}
.input_user,
.input_pass:focus {
box-shadow: none !important;
outline: 0px !important;
}

#messages{
background-color: grey;
color: #fff;
padding: 10px;
margin-top: 10px;
}

</style>

</head>
<body>
<div class="container h-100">
<div class="d-flex justify-content-center h-100">
<div class="user_card">
<div class="d-flex justify-content-center">


<h3 id="form-title">Question Form</h3>
</div>
<div class="d-flex justify-content-center form_container">
<form method="POST" action="">
{% csrf_token %}
<div class="input-group mb-3">
<h6 id="questionTitle"> {{question.QuestionText}} </h6>
</div>
{% for option in options %}
<input type="radio" id="{{ option.OptionID }}" name="result" value="{{ option.OptionID }}">
<label for="{{ option.OptionID }}">{{ option.OptionText }}</label> <br>
{% endfor %}

<div class="d-flex justify-content-center mt-3 login_container">
<input class="btn login_btn" type="submit" value="Submit">
</div>
</form>

</div>
{{form.errors}}
{% for message in messages %}
<p id='messages'>{{message}} </p>
{%  endfor  %}


</div>
</div>
</div>
</div>
</body>

</html>

我的修复:

视图

def question_detail(request, id ='default'):
question = Question.objects.get(QuestionsID = id)
options = Option.objects.filter(QuestionsID = question)

if request.method == 'POST':
current_user = request.user
c = current_user.userID
acc = Account.objects.get(userID=c)
OptionID = request.POST.get('result')
op = Option.objects.get(OptionID = OptionID)
if OptionID and c:
obj = Result.objects.create(userID = acc, QuestionsID = question, ChosenOptionID = op)
obj.save()

messages.success(request, "Answer Submitted")
return redirect('dashboardPage')
context = {'question' : question,
'options' : options}


return render(request, 'questionForm.html', context)

我已经通过模型将其直接保存到数据库中。我没有使用表单函数。

最新更新