Я разрабатываю приложение, в котором учащиеся могут оценивать своих учителей с помощью опроса.
В основном приложение создает динамический URL для каждого учителя, например:
- Учитель Майк: mywebsite.com/teacher/1
- Учитель Брайан: mywebsite.com/teacher/2
Числа соответствуют ПК каждого учителя. Студент заполняет опрос и при отправке сначала проверяет в базе данных, что ответы не были отправлены ранее (чтобы избежать дубликатов). Если ответ уже был сохранен ранее, отображается страница с указанием этого.
Все работает нормально, но есть проблема, если пользователь (студент) выполняет странное действие. Когда ученик оценивает, например, Учителя Майка: генерируется URL-адрес mywebsite.com/teacher/rate/1 и отображается шаблон, в котором говорится, что ответ сохранен. Проблема возникает здесь:
Если человек в то время изменил число (pk) в URL, например, с 1 на 2, приложение сохраняет ответы учителя-1 в записи учителя-2.
уточнение : если учащемуся назначены учителя 1, 2 и 3 и он изменяет pk в URL-адресе на 5, проблем не возникает, поскольку приложение обнаруживает, что ученик не имеет разрешения на оценку учитель. Проблема заключается в том, что если его изменить с 1 на 3, например, поскольку у ученика есть разрешение на оценку обоих учеников.
Я знаю, это странное поведение. Но я бы хотел найти способ решить эту проблему.
Вид для представления ответов таков:
def send(request, user_pk):
if not request.user.is_authenticated:
return HttpResponseRedirect('/accounts/login/')
else:
#first look for the record not to exist in the DB to avoid duplicate records
exist = Answers.objects.filter(name= request.user, teacher= user_pk ).exists()
# if there is not then I proceed to create the record in the database
if exist == False:
for key, value in request.POST.items():
if clave != 'csrfmiddlewaretoken':
Answers.objects.create(question=int(clave), answer_to_question=int(valor), student = request.user,teacher = int(user_pk))
#then I change a record in the table of my DB where the finished evaluations are stored, from false to true.
actual_state= State.objects.get(student__name = request.user, teacher = user_pk)
actual_state.finished_evaluation = True
actual_state.save()
return render(request,"myapp\send.html")
else:
return render(request,"myapp\error.html")