Python 读取数据并将其保存到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.

我试图理解如何将数据保存到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.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文档中阅读所有关于它的内容:使用表单进行复杂的选择可能看起来有点困难,但真正值得一试。