This commit is contained in:
Ross
2021-08-03 20:34:35 +01:00
parent cdc1259e56
commit accef904be
8 changed files with 96 additions and 13 deletions
+3 -3
View File
@@ -491,14 +491,14 @@ td.user-answer-score-2::after {
color: red 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 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 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 color: green
} }
+20 -1
View File
@@ -1,6 +1,6 @@
import django_filters import django_filters
from .models import Long, LongSeries, Exam from .models import Long, LongSeries, Exam, CidUserAnswer
from django.contrib.auth.models import User from django.contrib.auth.models import User
def get_exams(request): def get_exams(request):
@@ -52,3 +52,22 @@ class LongSeriesFilter(django_filters.FilterSet):
queryset = 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) super(LongSeriesFilter, self).__init__(data=data, queryset=queryset, prefix=prefix, request=request)
pass 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
+25 -1
View File
@@ -1,7 +1,7 @@
import django_tables2 as tables import django_tables2 as tables
from django_tables2.utils import A from django_tables2.utils import A
from .models import Long, LongSeries from .models import Long, LongSeries, CidUserAnswer
from django.utils.html import format_html from django.utils.html import format_html
@@ -112,3 +112,27 @@ class LongSeriesTable(tables.Table):
def render_popup(self, value, record): def render_popup(self, value, record):
print(self) print(self)
return format_html("""<a href="#" onclick="return window.create_popup_window('/longs/series/{}', 'Series')" >Popup</a>""", record.pk) return format_html("""<a href="#" onclick="return window.create_popup_window('/longs/series/{}', 'Series')" >Popup</a>""", 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",
)
+18
View File
@@ -0,0 +1,18 @@
{% extends 'longs/base.html' %}
{% load render_table from django_tables2 %}
{% block css %}
{% endblock %}
{% block content %}
<div id="view-filter-options">
<h3>Filter Long </h3>
<form action="" method="get">
{{ filter.form }}
<input class="btn btn-primary btn-sm mt-1 mb-1" type="submit" />
</form>
</div>
{% render_table table %}
{% endblock %}
+3
View File
@@ -104,4 +104,7 @@ urlpatterns = [
name="long_series_update", name="long_series_update",
), ),
path("<int:pk>/add_note", views.AddNote.as_view(), name="long_add_note"), path("<int:pk>/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/<int:pk>", views.UserAnswerView.as_view(), name="user_answer_view"),
path("user_answers/<int:pk>/delete", views.UserAnswerDelete.as_view(), name="user_answer_delete"),
] ]
+21 -2
View File
@@ -8,6 +8,8 @@ from django.contrib.auth.models import User
from django.core.exceptions import ObjectDoesNotExist, PermissionDenied, ViewDoesNotExist from django.core.exceptions import ObjectDoesNotExist, PermissionDenied, ViewDoesNotExist
from django.contrib.auth.mixins import LoginRequiredMixin 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.edit import CreateView, UpdateView, DeleteView
from django.views.generic import ListView from django.views.generic import ListView
@@ -33,8 +35,8 @@ from .models import (
Exam, Exam,
CidUserAnswer, CidUserAnswer,
) )
from .tables import LongTable, LongSeriesTable from .tables import LongTable, LongSeriesTable, UserAnswerTable
from .filters import LongFilter, LongSeriesFilter from .filters import LongFilter, LongSeriesFilter, UserAnswerFilter
from django_tables2 import SingleTableView, SingleTableMixin from django_tables2 import SingleTableView, SingleTableMixin
from django_filters.views import FilterView from django_filters.views import FilterView
@@ -999,3 +1001,20 @@ def question_json_recreate(request, pk):
#question.get_question_json() #question.get_question_json()
return redirect("longs:question_detail", pk=pk) 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")
+2 -2
View File
@@ -66,7 +66,7 @@ urlpatterns = [
name="rapid_update", name="rapid_update",
), ),
path("<int:pk>/add_note", views.AddNote.as_view(), name="rapid_add_note"), path("<int:pk>/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.UserAnswerTableView.as_view(), name="rapid_user_answer_table_view"),
path("user_answers/<int:pk>", views.RapidUserAnswerView.as_view(), name="rapid_user_answer_view"), path("user_answers/<int:pk>", views.UserAnswerView.as_view(), name="rapid_user_answer_view"),
path("user_answers/<int:pk>/delete", views.UserAnswerDelete.as_view(), name="rapid_user_answer_delete"), path("user_answers/<int:pk>/delete", views.UserAnswerDelete.as_view(), name="rapid_user_answer_delete"),
] ]
+2 -2
View File
@@ -985,11 +985,11 @@ class ExamUpdate(
return super().form_valid(form) return super().form_valid(form)
class RapidUserAnswerView(LoginRequiredMixin, DetailView): class UserAnswerView(LoginRequiredMixin, DetailView):
model = CidUserAnswer model = CidUserAnswer
class RapidUserAnswerTableView(LoginRequiredMixin, SingleTableMixin, FilterView): class UserAnswerTableView(LoginRequiredMixin, SingleTableMixin, FilterView):
model = CidUserAnswer model = CidUserAnswer
table_class = RapidUserAnswerTable table_class = RapidUserAnswerTable
template_name = "rapids/rapid_question_view.html" template_name = "rapids/rapid_question_view.html"