diff --git a/anatomy/static/css/anatomy.css b/anatomy/static/css/anatomy.css
index 65cb5577..f47d2658 100644
--- a/anatomy/static/css/anatomy.css
+++ b/anatomy/static/css/anatomy.css
@@ -491,14 +491,14 @@ td.user-answer-score-2::after {
color: red
}
- table.longs .user-answer-score-5, table.longs .user-answer-score-5\.5 {
+ table.longs .user-answer-score-5\.0, table.longs .user-answer-score-5\.5 {
color: yellow
}
- table.longs .user-answer-score-6, table.longs .user-answer-score-6\.5 {
+ table.longs .user-answer-score-6\.0, table.longs .user-answer-score-6\.5 {
color: yellowgreen
}
- table.longs .user-answer-score-7, table.longs .user-answer-score-7\.5 {
+ table.longs .user-answer-score-7\.0, table.longs .user-answer-score-7\.5 {
color: green
}
\ No newline at end of file
diff --git a/longs/filters.py b/longs/filters.py
index 98cdb4d3..84b0bf94 100755
--- a/longs/filters.py
+++ b/longs/filters.py
@@ -1,6 +1,6 @@
import django_filters
-from .models import Long, LongSeries, Exam
+from .models import Long, LongSeries, Exam, CidUserAnswer
from django.contrib.auth.models import User
def get_exams(request):
@@ -51,4 +51,23 @@ class LongSeriesFilter(django_filters.FilterSet):
#queryset = queryset.filter(open_access=True) | queryset.filter(author__id=request.user.id)
queryset = queryset.filter(author__id=request.user.id)
super(LongSeriesFilter, self).__init__(data=data, queryset=queryset, prefix=prefix, request=request)
+ pass
+
+class UserAnswerFilter(django_filters.FilterSet):
+ class Meta:
+ model = CidUserAnswer
+ fields = (
+ "cid",
+ "normal",
+ "answer",
+ #"answer_compare",
+ "exam",
+ "created",
+ "updated",
+ )
+
+ def __init__(self, data=None, queryset=None, prefix=None, strict=None, user=None, request=None):
+ if not request.user.groups.filter(name="long_checker").exists():
+ queryset = queryset.filter(open_access=True) | queryset.filter(author__id=request.user.id)
+ super(UserAnswerFilter, self).__init__(data=data, queryset=queryset, prefix=prefix, request=request)
pass
\ No newline at end of file
diff --git a/longs/tables.py b/longs/tables.py
index c1aebc63..6a299515 100755
--- a/longs/tables.py
+++ b/longs/tables.py
@@ -1,7 +1,7 @@
import django_tables2 as tables
from django_tables2.utils import A
-from .models import Long, LongSeries
+from .models import Long, LongSeries, CidUserAnswer
from django.utils.html import format_html
@@ -111,4 +111,28 @@ class LongSeriesTable(tables.Table):
def render_popup(self, value, record):
print(self)
- return format_html("""Popup""", record.pk)
\ No newline at end of file
+ return format_html("""Popup""", record.pk)
+
+class UserAnswerTable(tables.Table):
+ select = tables.CheckBoxColumn(accessor=("pk"))
+ delete = tables.LinkColumn(
+ "longs:user_answer_delete", text="Delete", args=[A("pk")], orderable=False
+ )
+ view = tables.LinkColumn('longs:user_answer_view',
+ text='View',
+ args=[A('pk')],
+ orderable=False)
+ class Meta:
+ model = CidUserAnswer
+ template_name = "django_tables2/bootstrap4.html"
+ fields = (
+ "cid",
+ "question",
+ "normal",
+ "answer",
+ #"answer_compare",
+ "exam",
+ "created",
+ "updated",
+ )
+
\ No newline at end of file
diff --git a/longs/templates/longs/question_view.html b/longs/templates/longs/question_view.html
new file mode 100644
index 00000000..0c1da180
--- /dev/null
+++ b/longs/templates/longs/question_view.html
@@ -0,0 +1,18 @@
+{% extends 'longs/base.html' %}
+
+{% load render_table from django_tables2 %}
+{% block css %}
+{% endblock %}
+
+{% block content %}
+
+
+
Filter Long
+
+
+{% render_table table %}
+
+{% endblock %}
\ No newline at end of file
diff --git a/longs/urls.py b/longs/urls.py
index 7edf2ffa..ca47b8d6 100755
--- a/longs/urls.py
+++ b/longs/urls.py
@@ -104,4 +104,7 @@ urlpatterns = [
name="long_series_update",
),
path("/add_note", views.AddNote.as_view(), name="long_add_note"),
+ path("user_answers/", views.UserAnswerTableView.as_view(), name="user_answer_table_view"),
+ path("user_answers/", views.UserAnswerView.as_view(), name="user_answer_view"),
+ path("user_answers//delete", views.UserAnswerDelete.as_view(), name="user_answer_delete"),
]
diff --git a/longs/views.py b/longs/views.py
index f02aa1f8..bda049bf 100755
--- a/longs/views.py
+++ b/longs/views.py
@@ -8,6 +8,8 @@ from django.contrib.auth.models import User
from django.core.exceptions import ObjectDoesNotExist, PermissionDenied, ViewDoesNotExist
from django.contrib.auth.mixins import LoginRequiredMixin
+from django.views.generic.detail import DetailView
+from generic.mixins import SuperuserRequiredMixin
from django.views.generic.edit import CreateView, UpdateView, DeleteView
from django.views.generic import ListView
@@ -33,8 +35,8 @@ from .models import (
Exam,
CidUserAnswer,
)
-from .tables import LongTable, LongSeriesTable
-from .filters import LongFilter, LongSeriesFilter
+from .tables import LongTable, LongSeriesTable, UserAnswerTable
+from .filters import LongFilter, LongSeriesFilter, UserAnswerFilter
from django_tables2 import SingleTableView, SingleTableMixin
from django_filters.views import FilterView
@@ -998,4 +1000,21 @@ def question_json_recreate(request, pk):
#question.get_question_json()
- return redirect("longs:question_detail", pk=pk)
\ No newline at end of file
+ return redirect("longs:question_detail", pk=pk)
+
+
+class UserAnswerView(LoginRequiredMixin, DetailView):
+ model = CidUserAnswer
+
+
+class UserAnswerTableView(LoginRequiredMixin, SingleTableMixin, FilterView):
+ model = CidUserAnswer
+ table_class = UserAnswerTable
+ template_name = "longs/question_view.html"
+
+ filterset_class = UserAnswerFilter
+
+
+class UserAnswerDelete(SuperuserRequiredMixin, DeleteView):
+ model = CidUserAnswer
+ success_url = reverse_lazy("longs:user_answer_table_view")
diff --git a/rapids/urls.py b/rapids/urls.py
index 44ccbcec..6eab01b0 100755
--- a/rapids/urls.py
+++ b/rapids/urls.py
@@ -66,7 +66,7 @@ urlpatterns = [
name="rapid_update",
),
path("/add_note", views.AddNote.as_view(), name="rapid_add_note"),
- path("user_answers/", views.RapidUserAnswerTableView.as_view(), name="rapid_user_answer_table_view"),
- path("user_answers/", views.RapidUserAnswerView.as_view(), name="rapid_user_answer_view"),
+ path("user_answers/", views.UserAnswerTableView.as_view(), name="rapid_user_answer_table_view"),
+ path("user_answers/", views.UserAnswerView.as_view(), name="rapid_user_answer_view"),
path("user_answers//delete", views.UserAnswerDelete.as_view(), name="rapid_user_answer_delete"),
]
diff --git a/rapids/views.py b/rapids/views.py
index b0a470ed..9657ad8f 100755
--- a/rapids/views.py
+++ b/rapids/views.py
@@ -985,11 +985,11 @@ class ExamUpdate(
return super().form_valid(form)
-class RapidUserAnswerView(LoginRequiredMixin, DetailView):
+class UserAnswerView(LoginRequiredMixin, DetailView):
model = CidUserAnswer
-class RapidUserAnswerTableView(LoginRequiredMixin, SingleTableMixin, FilterView):
+class UserAnswerTableView(LoginRequiredMixin, SingleTableMixin, FilterView):
model = CidUserAnswer
table_class = RapidUserAnswerTable
template_name = "rapids/rapid_question_view.html"