rename CidUserAnswer to UserAnswer

This commit is contained in:
Ross
2023-05-15 11:15:17 +01:00
parent 7aa78c2807
commit d05752b2dc
49 changed files with 346 additions and 251 deletions
+3 -3
View File
@@ -1,5 +1,5 @@
from anatomy.models import CidUserAnswer
from physics.models import Category, Question, Exam, CidUserAnswer
from anatomy.models import UserAnswer
from physics.models import Category, Question, Exam, UserAnswer
from generic.models import CidUser
from django.contrib import admin
@@ -37,5 +37,5 @@ class ExamAdmin(VersionAdmin, admin.ModelAdmin):
admin.site.register(Category)
admin.site.register(Question, QuestionAdmin)
admin.site.register(Exam, ExamAdmin)
admin.site.register(CidUserAnswer)
admin.site.register(UserAnswer)
+5 -5
View File
@@ -1,8 +1,8 @@
import django_filters
from .models import Category, Question, CidUserAnswer, Exam
from .models import Category, Question, UserAnswer, Exam
#from generic.filters import CidUserAnswerFilter
#from generic.filters import UserAnswerFilter
from django.contrib.auth.models import User
@@ -43,9 +43,9 @@ class QuestionFilter(django_filters.FilterSet):
super(QuestionFilter, self).__init__(data=data, queryset=queryset, prefix=prefix, request=request)
pass
class CidUserAnswerFilter(django_filters.FilterSet):
class UserAnswerFilter(django_filters.FilterSet):
class Meta:
model= CidUserAnswer
model= UserAnswer
fields = (
"cid",
#"question",
@@ -59,5 +59,5 @@ class CidUserAnswerFilter(django_filters.FilterSet):
def __init__(self, data=None, queryset=None, prefix=None, strict=None, user=None, request=None):
if not request.user.groups.filter(name="physics_checker").exists():
queryset = queryset.filter(author__id=request.user.id)
super(CidUserAnswerFilter, self).__init__(data=data, queryset=queryset, prefix=prefix, request=request)
super(UserAnswerFilter, self).__init__(data=data, queryset=queryset, prefix=prefix, request=request)
pass
+4 -4
View File
@@ -12,7 +12,7 @@ from generic.forms import ExamAuthorFormMixin, ExamFormMixin
from .models import (
Question,
CidUserAnswer,
UserAnswer,
Exam,
)
@@ -20,13 +20,13 @@ from django.contrib.admin.widgets import FilteredSelectMultiple
from django.forms.widgets import RadioSelect, TextInput, Textarea
class CidUserAnswerForm(ModelForm):
class UserAnswerForm(ModelForm):
class Meta:
model = CidUserAnswer
model = UserAnswer
fields = ["a", "b", "c", "d", "e"]
def __init__(self, *args, **kwargs):
super(CidUserAnswerForm, self).__init__(*args, **kwargs)
super(UserAnswerForm, self).__init__(*args, **kwargs)
#self.fields['answer'].required = False
@@ -0,0 +1,19 @@
# Generated by Django 4.1.4 on 2023-05-15 10:14
from django.conf import settings
from django.db import migrations
class Migration(migrations.Migration):
dependencies = [
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
('physics', '0027_alter_ciduseranswer_options_alter_ciduseranswer_cid'),
]
operations = [
migrations.RenameModel(
old_name='CidUserAnswer',
new_name='UserAnswer',
),
]
+2 -2
View File
@@ -12,7 +12,7 @@ from django.utils.translation import gettext_lazy as _
from sortedm2m.fields import SortedManyToManyField
from generic.models import CidUser, CidUserGroup, ExamBase, ExamUserStatus, QuestionNote, CidUserAnswerBase, UserUserGroup
from generic.models import CidUser, CidUserGroup, ExamBase, ExamUserStatus, QuestionNote, UserAnswerBase, UserUserGroup
import reversion
@@ -182,7 +182,7 @@ class Exam(ExamBase):
@reversion.register
class CidUserAnswer(CidUserAnswerBase):
class UserAnswer(UserAnswerBase):
"""User answers by candidate"""
question = models.ForeignKey(
+4 -4
View File
@@ -2,7 +2,7 @@ from django.utils.safestring import mark_safe
import django_tables2 as tables
from django_tables2.utils import A
from .models import Question, CidUserAnswer
from .models import Question, UserAnswer
from django.utils.html import format_html
@@ -10,7 +10,7 @@ from django.utils.html import format_html
# from easy_thumbnails.exceptions import InvalidImageFormatError
# from generic.tables import CidUserAnswerTable
# from generic.tables import UserAnswerTable
# class ImageColumn(tables.Column):
@@ -75,7 +75,7 @@ class QuestionTable(tables.Table):
return mark_safe(value)
class CidUserAnswerTable(tables.Table):
class UserAnswerTable(tables.Table):
select = tables.CheckBoxColumn(accessor=("pk"))
# delete = tables.LinkColumn(
# "physics:user_answer_delete", text="Delete", args=[A("pk")], orderable=False
@@ -85,7 +85,7 @@ class CidUserAnswerTable(tables.Table):
)
class Meta:
model = CidUserAnswer
model = UserAnswer
template_name = "django_tables2/bootstrap4.html"
fields = (
"cid",
+3 -3
View File
@@ -16,7 +16,7 @@ from bs4 import BeautifulSoup
from physics.views import GenericExamViews as PhysicsExamViews
from physics.models import Category, CidUserAnswer, Exam, Question
from physics.models import Category, UserAnswer, Exam, Question
from generic.models import CidUser, CidUserGroup, UserUserGroup
from rad.test_helpers import AssertNotFound, create_cid_user_and_groups
@@ -541,9 +541,9 @@ def test_exams(db, client):
# answer the final question
if testing_cid_user:
cid_user_answer = CidUserAnswer(question=extra_question, a=True, b=False, c=True, d=False, e=True, cid=cid_user.cid, exam=exam)
cid_user_answer = UserAnswer(question=extra_question, a=True, b=False, c=True, d=False, e=True, cid=cid_user.cid, exam=exam)
else:
cid_user_answer = CidUserAnswer(question=extra_question, a=True, b=False, c=True, d=False, e=True, user=current_user, exam=exam)
cid_user_answer = UserAnswer(question=extra_question, a=True, b=False, c=True, d=False, e=True, user=current_user, exam=exam)
cid_user_answer.save()
cid_exam_scores_res = client.get(
+3 -3
View File
@@ -51,17 +51,17 @@ urlpatterns.extend(
# path("exam/json/<int:pk>/recreate", views.exam_json_recreate, name="exam_json_recreate"),
path(
"user_answers/",
views.CidUserAnswerTableView.as_view(),
views.UserAnswerTableView.as_view(),
name="user_answer_table_view",
),
path(
"user_answers/<int:pk>",
views.CidUserAnswerView.as_view(),
views.UserAnswerView.as_view(),
name="user_answer_view",
),
path(
"user_answers/<int:pk>/delete",
views.CidUserAnswerDelete.as_view(),
views.UserAnswerDelete.as_view(),
name="user_answer_delete",
),
path(
+21 -21
View File
@@ -2,9 +2,9 @@ from django.contrib.contenttypes.models import ContentType
from django.utils import timezone
from generic.models import CidUser
from physics.decorators import user_is_author_or_physics_checker
from physics.filters import QuestionFilter, CidUserAnswerFilter
from physics.filters import QuestionFilter, UserAnswerFilter
from generic.mixins import SuperuserRequiredMixin
from physics.tables import QuestionTable, CidUserAnswerTable
from physics.tables import QuestionTable, UserAnswerTable
from django.shortcuts import render, get_object_or_404, redirect
from django.views.decorators.csrf import csrf_exempt
from django import forms
@@ -32,7 +32,7 @@ from django_filters.views import FilterView
from django_tables2.views import SingleTableMixin
from reversion.views import RevisionMixin
from .models import Question, Category, Exam, CidUserAnswer
from .models import Question, Category, Exam, UserAnswer
from collections import defaultdict
import os
@@ -58,7 +58,7 @@ from rest_framework.pagination import PageNumberPagination
from django.core.exceptions import PermissionDenied
from .forms import CidUserAnswerForm, ExamAuthorForm, ExamForm
from .forms import UserAnswerForm, ExamAuthorForm, ExamForm
from .decorators import (
user_is_author_or_physics_checker,
user_is_exam_author_or_physics_checker,
@@ -214,9 +214,9 @@ def exam_take_overview(request, pk, cid=None, passcode=None):
questions = exam.exam_questions.all()
if cid is not None:
answers = CidUserAnswer.objects.filter(cid=cid, exam=exam)
answers = UserAnswer.objects.filter(cid=cid, exam=exam)
else:
answers = CidUserAnswer.objects.filter(user=request.user, exam=exam)
answers = UserAnswer.objects.filter(user=request.user, exam=exam)
answer_question_map = {}
for ans in answers:
@@ -289,9 +289,9 @@ def exam_take(request, pk, sk, cid=None, passcode=None):
if request.method == "POST":
if answer:
form = CidUserAnswerForm(request.POST, instance=answer)
form = UserAnswerForm(request.POST, instance=answer)
else:
form = CidUserAnswerForm(request.POST)
form = UserAnswerForm(request.POST)
if form.is_valid() and not exam.publish_results:
answer = form.save(commit=False)
@@ -327,7 +327,7 @@ def exam_take(request, pk, sk, cid=None, passcode=None):
elif "goto" in request.POST:
return redirect(take_url, sk=int(request.POST.get("goto")), **kwargs)
else:
form = CidUserAnswerForm(instance=answer)
form = UserAnswerForm(instance=answer)
saved_answer = False
@@ -376,7 +376,7 @@ def exam_take(request, pk, sk, cid=None, passcode=None):
# pass
#
# for qid in questions:
# exiting_answers = CidUserAnswer.objects.filter(
# exiting_answers = UserAnswer.objects.filter(
# question__id=qid, exam__id=answer["eid"], cid=answer["cid"]
# )
#
@@ -387,7 +387,7 @@ def exam_take(request, pk, sk, cid=None, passcode=None):
# e = questions[qid]["e"]
#
# if not exiting_answers:
# ans = CidUserAnswer(a=a, b=b, c=c, d=d, e=e, cid=answer["cid"])
# ans = UserAnswer(a=a, b=b, c=c, d=d, e=e, cid=answer["cid"])
# ans.question_id = qid
# ans.exam_id = answer["eid"]
#
@@ -409,9 +409,9 @@ def exam_take(request, pk, sk, cid=None, passcode=None):
# return True, None
GenericExamViews = ExamViews(Exam, Question, None, CidUserAnswer, "physics", "physics")
GenericExamViews = ExamViews(Exam, Question, None, UserAnswer, "physics", "physics")
GenericViews = GenericViewBase("physics", Question, CidUserAnswer, Exam)
GenericViews = GenericViewBase("physics", Question, UserAnswer, Exam)
class ExamCreate(ExamCreateBase):
model = Exam
@@ -457,21 +457,21 @@ class QuestionView(
class CidUserAnswerView(AuthorOrCheckerRequiredMixin, LoginRequiredMixin, DetailView):
model = CidUserAnswer
class UserAnswerView(AuthorOrCheckerRequiredMixin, LoginRequiredMixin, DetailView):
model = UserAnswer
class CidUserAnswerTableView(
class UserAnswerTableView(
AuthorOrCheckerRequiredMixin, LoginRequiredMixin, SingleTableMixin, FilterView
):
model = CidUserAnswer
table_class = CidUserAnswerTable
model = UserAnswer
table_class = UserAnswerTable
template_name = "physics/user_answer_question_view.html"
filterset_class = CidUserAnswerFilter
filterset_class = UserAnswerFilter
class CidUserAnswerDelete(SuperuserRequiredMixin, DeleteView):
model = CidUserAnswer
class UserAnswerDelete(SuperuserRequiredMixin, DeleteView):
model = UserAnswer
template_name = "user_answer_delete.html"
success_url = reverse_lazy("physics:user_answer_table_view")