create base useranswer class
This commit is contained in:
+3
-3
@@ -2,7 +2,7 @@ import django_filters
|
||||
|
||||
from .models import Category, Question, CidUserAnswer, Exam
|
||||
|
||||
#from generic.filters import UserAnswerFilter
|
||||
#from generic.filters import CidUserAnswerFilter
|
||||
from django.contrib.auth.models import User
|
||||
|
||||
|
||||
@@ -43,7 +43,7 @@ class QuestionFilter(django_filters.FilterSet):
|
||||
super(QuestionFilter, self).__init__(data=data, queryset=queryset, prefix=prefix, request=request)
|
||||
pass
|
||||
|
||||
class UserAnswerFilter(django_filters.FilterSet):
|
||||
class CidUserAnswerFilter(django_filters.FilterSet):
|
||||
class Meta:
|
||||
model= CidUserAnswer
|
||||
fields = (
|
||||
@@ -59,5 +59,5 @@ class UserAnswerFilter(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(UserAnswerFilter, self).__init__(data=data, queryset=queryset, prefix=prefix, request=request)
|
||||
super(CidUserAnswerFilter, self).__init__(data=data, queryset=queryset, prefix=prefix, request=request)
|
||||
pass
|
||||
@@ -0,0 +1,22 @@
|
||||
# Generated by Django 4.1.4 on 2023-05-15 10:11
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('physics', '0026_remove_exam_stats_graph'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AlterModelOptions(
|
||||
name='ciduseranswer',
|
||||
options={'ordering': ['cid']},
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='ciduseranswer',
|
||||
name='cid',
|
||||
field=models.BigIntegerField(blank=True, help_text='Candidate ID (limitied by BigIntegerField size)', null=True),
|
||||
),
|
||||
]
|
||||
+2
-6
@@ -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, UserUserGroup
|
||||
from generic.models import CidUser, CidUserGroup, ExamBase, ExamUserStatus, QuestionNote, CidUserAnswerBase, UserUserGroup
|
||||
|
||||
import reversion
|
||||
|
||||
@@ -182,7 +182,7 @@ class Exam(ExamBase):
|
||||
|
||||
|
||||
@reversion.register
|
||||
class CidUserAnswer(models.Model):
|
||||
class CidUserAnswer(CidUserAnswerBase):
|
||||
"""User answers by candidate"""
|
||||
|
||||
question = models.ForeignKey(
|
||||
@@ -194,8 +194,6 @@ class CidUserAnswer(models.Model):
|
||||
d = models.BooleanField(blank=False)
|
||||
e = models.BooleanField(blank=False)
|
||||
|
||||
cid = models.IntegerField(blank=True, null=True)
|
||||
|
||||
user = models.ForeignKey(
|
||||
settings.AUTH_USER_MODEL,
|
||||
on_delete=models.CASCADE,
|
||||
@@ -209,8 +207,6 @@ class CidUserAnswer(models.Model):
|
||||
Exam, related_name="cid_user_answers", on_delete=models.CASCADE, null=True
|
||||
)
|
||||
|
||||
created = models.DateTimeField(auto_now_add=True)
|
||||
updated = models.DateTimeField(auto_now=True)
|
||||
|
||||
def __str__(self):
|
||||
return "{}/{}/{}".format(self.cid, self.exam, self.question.pk)
|
||||
|
||||
+2
-2
@@ -10,7 +10,7 @@ from django.utils.html import format_html
|
||||
|
||||
# from easy_thumbnails.exceptions import InvalidImageFormatError
|
||||
|
||||
# from generic.tables import UserAnswerTable
|
||||
# from generic.tables import CidUserAnswerTable
|
||||
|
||||
|
||||
# class ImageColumn(tables.Column):
|
||||
@@ -75,7 +75,7 @@ class QuestionTable(tables.Table):
|
||||
return mark_safe(value)
|
||||
|
||||
|
||||
class UserAnswerTable(tables.Table):
|
||||
class CidUserAnswerTable(tables.Table):
|
||||
select = tables.CheckBoxColumn(accessor=("pk"))
|
||||
# delete = tables.LinkColumn(
|
||||
# "physics:user_answer_delete", text="Delete", args=[A("pk")], orderable=False
|
||||
|
||||
+3
-3
@@ -51,17 +51,17 @@ urlpatterns.extend(
|
||||
# path("exam/json/<int:pk>/recreate", views.exam_json_recreate, name="exam_json_recreate"),
|
||||
path(
|
||||
"user_answers/",
|
||||
views.UserAnswerTableView.as_view(),
|
||||
views.CidUserAnswerTableView.as_view(),
|
||||
name="user_answer_table_view",
|
||||
),
|
||||
path(
|
||||
"user_answers/<int:pk>",
|
||||
views.UserAnswerView.as_view(),
|
||||
views.CidUserAnswerView.as_view(),
|
||||
name="user_answer_view",
|
||||
),
|
||||
path(
|
||||
"user_answers/<int:pk>/delete",
|
||||
views.UserAnswerDelete.as_view(),
|
||||
views.CidUserAnswerDelete.as_view(),
|
||||
name="user_answer_delete",
|
||||
),
|
||||
path(
|
||||
|
||||
+7
-7
@@ -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, UserAnswerFilter
|
||||
from physics.filters import QuestionFilter, CidUserAnswerFilter
|
||||
from generic.mixins import SuperuserRequiredMixin
|
||||
from physics.tables import QuestionTable, UserAnswerTable
|
||||
from physics.tables import QuestionTable, CidUserAnswerTable
|
||||
from django.shortcuts import render, get_object_or_404, redirect
|
||||
from django.views.decorators.csrf import csrf_exempt
|
||||
from django import forms
|
||||
@@ -457,21 +457,21 @@ class QuestionView(
|
||||
|
||||
|
||||
|
||||
class UserAnswerView(AuthorOrCheckerRequiredMixin, LoginRequiredMixin, DetailView):
|
||||
class CidUserAnswerView(AuthorOrCheckerRequiredMixin, LoginRequiredMixin, DetailView):
|
||||
model = CidUserAnswer
|
||||
|
||||
|
||||
class UserAnswerTableView(
|
||||
class CidUserAnswerTableView(
|
||||
AuthorOrCheckerRequiredMixin, LoginRequiredMixin, SingleTableMixin, FilterView
|
||||
):
|
||||
model = CidUserAnswer
|
||||
table_class = UserAnswerTable
|
||||
table_class = CidUserAnswerTable
|
||||
template_name = "physics/user_answer_question_view.html"
|
||||
|
||||
filterset_class = UserAnswerFilter
|
||||
filterset_class = CidUserAnswerFilter
|
||||
|
||||
|
||||
class UserAnswerDelete(SuperuserRequiredMixin, DeleteView):
|
||||
class CidUserAnswerDelete(SuperuserRequiredMixin, DeleteView):
|
||||
model = CidUserAnswer
|
||||
template_name = "user_answer_delete.html"
|
||||
success_url = reverse_lazy("physics:user_answer_table_view")
|
||||
|
||||
Reference in New Issue
Block a user