Python 读取数据并将其保存到Django模型
我试图理解如何将数据保存到Django模型中。我有一个表格,可以显示模型中的问题和选项。我希望用户回答问题并保存在回答模型中。这是我的模型Python 读取数据并将其保存到Django模型,python,django,orm,Python,Django,Orm,我试图理解如何将数据保存到Django模型中。我有一个表格,可以显示模型中的问题和选项。我希望用户回答问题并保存在回答模型中。这是我的模型 class Question(models.Model): question_text = models.CharField(max_length=200) caption = models.CharField(max_length=200, default="this is a caption") choices = models.
class Question(models.Model):
question_text = models.CharField(max_length=200)
caption = models.CharField(max_length=200, default="this is a caption")
choices = models.ManyToManyField(Choice)
vis_image = models.ImageField(default= "this is an image", null=False, blank=False, upload_to="static/study/img")
def __str__(self):
return self.question_text
class Condition(models.Model):
name = models.CharField(max_length=200)
def __str__(self):
return self.name
class Participant(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE, null=True)
created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now=True)
condition = models.ForeignKey(Condition, on_delete=models.CASCADE)
score = models.IntegerField(default=0)
def __str__(self):
return self.user.username
class Answer(models.Model):
participant = models.ForeignKey(Participant, on_delete=models.CASCADE)
question = models.ForeignKey(Question, on_delete=models.CASCADE)
answer = models.CharField(max_length=200, null=True)
completion_time = models.FloatField()
created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now=True)
def __str__(self):
return self.answer
views.py
@login_required
def LPSC_VIEW1(request):
participant=Participant.objects.get(user=request.user)
#GET the first question based on the participant condition
if participant.condition.name == 'LPN':
First_question= Question.objects.get(id=1)
all_choices = First_question.choices.all()
context = {'First_question': First_question, 'all_choices': all_choices}
return render(request, 'study/FirstQN.html', context)
else:
First_question= Question.objects.get(id=11)
all_choices = First_question.choices.all()
context = {'First_question': First_question, 'all_choices': all_choices}
return render(request, 'study/FirstQSC.html', context)
FirstQN.html
<form method="POST">
{% csrf_token %}
<label>
{{First_question}}
</label>
<img src="{{ First_question.vis_image.url }}" style= "height: 600px; width: 960px">
{% for i in all_choices %}
<input type="radio" id="choice" name="choice" value="{{ choice.id }}">
<label for="choice">{{ i.choice_text }}</label>
{% endfor %}
<input type="button" value="Submit" class="btn btn-primary" onclick="window.location.href = server_url +'/study/LPSC_VIEW2'">
</form>
{%csrf_令牌%}
{{第一个问题}
{i在所有_选项中的百分比%}
{{i.choice_text}
{%endfor%}
我的问题是,我是否可以使用相同的视图从数据库中读取数据,并将用户提交的数据保存在相同的视图中?或者我必须创建一个新的视图,但这不会导致冗余吗?我读过关于从表单保存数据的内容,但不明白如何将其应用于从数据库获取表单本身的情况。目前,上述代码运行良好 您可以重用视图,这是使用基于函数的视图执行此操作的标准方法。只需检查
请求。方法如下所示:
@login_required
def LPSC_VIEW1(request):
...
if request.method == 'POST':
# do your code for saving the answers here
... the rest of your code
通常,如果您提交了应该创建新记录的数据,则使用POST请求。对第一次呈现表单的同一视图执行此操作非常常见。使用django表单在这里非常方便。您可以在视图“if request.method=='POST':”中检查请求方法,然后验证用户输入并保存表单。您可以在django文档中阅读所有关于它的内容:使用表单进行复杂的选择可能看起来有点困难,但真正值得一试。