Чтение и сохранение данных в модель Django - PullRequest
1 голос
/ 02 апреля 2020

Я пытаюсь понять, как сохранить данные в моих 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

image

мой вопрос, могу ли я использовать тот же вид для чтения данные из базы данных и сохранить данные, представленные от пользователя в том же виде? или мне нужно создать новое представление, но тогда это не приведет к избыточности? Я читал о сохранении данных из форм, но не мог понять, как применять их в моем случае, когда сама форма извлекается из базы данных. На данный момент код выше всего работает отлично.

1 Ответ

1 голос
/ 02 апреля 2020

Вы можете повторно использовать представление, и это стандартный способ сделать это с помощью представлений на основе функций. Просто проверьте request.method следующим образом:

@login_required
def LPSC_VIEW1(request):
    ...
    if request.method == 'POST':
         # do your code for saving the answers here
    ... the rest of your code
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...