diff --git a/physics/templates/physics/question_view.html b/physics/templates/physics/question_view.html
new file mode 100644
index 00000000..d06501cc
--- /dev/null
+++ b/physics/templates/physics/question_view.html
@@ -0,0 +1,22 @@
+{% extends 'physics/base.html' %}
+
+{% block css %}
+{% endblock %}
+
+{% block content %}
+
+
+
Filter SBA Questions
+
+
+ {% autoescape off %}
+{% load render_table from django_tables2 %}
+{% render_table table %}
+ {% endautoescape %}
+
+{% endblock %}
\ No newline at end of file
diff --git a/physics/templates/physics/user_answer_question_view.html b/physics/templates/physics/user_answer_question_view.html
new file mode 100644
index 00000000..ad42ca09
--- /dev/null
+++ b/physics/templates/physics/user_answer_question_view.html
@@ -0,0 +1,31 @@
+{% extends 'physics/base.html' %}
+
+{% load render_table from django_tables2 %}
+{% block css %}
+{% endblock %}
+
+{% block content %}
+
+
+
Physics User Answers
+
+
+{% render_table table %}
+
+
+{% endblock %}
+
+{% block js %}
+
+{% endblock %}
\ No newline at end of file
diff --git a/physics/views.py b/physics/views.py
index 10e93723..3d273543 100644
--- a/physics/views.py
+++ b/physics/views.py
@@ -1,3 +1,6 @@
+from physics.filters import QuestionFilter, UserAnswerFilter
+from generic.mixins import SuperuserRequiredMixin
+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
@@ -7,6 +10,7 @@ from django.contrib.auth.decorators import login_required, user_passes_test
from django.contrib.auth.models import User
from django.contrib.auth.mixins import LoginRequiredMixin
+from django.views.generic.detail import DetailView
from django.views.generic.edit import CreateView, UpdateView, DeleteView
from django.views.generic import ListView
@@ -20,6 +24,8 @@ from django.urls import reverse_lazy, reverse
from django.http import Http404, JsonResponse
from django.http import HttpResponseRedirect, HttpResponse
+from django_filters.views import FilterView
+from django_tables2.views import SingleTableMixin
from reversion.views import RevisionMixin
from .models import Question, Category, Exam, CidUserAnswer
@@ -322,4 +328,28 @@ class ExamCreate(RevisionMixin, LoginRequiredMixin, CreateView):
return super().form_valid(form)
class ExamClone(ExamCloneMixin, ExamCreate):
- """Clone exam view"""
\ No newline at end of file
+ """Clone exam view"""
+
+class QuestionView(LoginRequiredMixin, SingleTableMixin, FilterView):
+ model = Question
+ table_class = QuestionTable
+ template_name = "physics/question_view.html"
+
+ filterset_class = QuestionFilter
+
+class UserAnswerView(LoginRequiredMixin, DetailView):
+ model = CidUserAnswer
+
+
+class UserAnswerTableView(LoginRequiredMixin, SingleTableMixin, FilterView):
+ model = CidUserAnswer
+ table_class = UserAnswerTable
+ template_name = "physics/user_answer_question_view.html"
+
+ filterset_class = UserAnswerFilter
+
+
+class UserAnswerDelete(SuperuserRequiredMixin, DeleteView):
+ model = CidUserAnswer
+ template_name = "user_answer_delete.html"
+ success_url = reverse_lazy("physics:user_answer_table_view")
\ No newline at end of file
diff --git a/rapids/views.py b/rapids/views.py
index 507ca07b..f4eb2dab 100755
--- a/rapids/views.py
+++ b/rapids/views.py
@@ -1097,4 +1097,5 @@ def question_save_annotation(request, pk):
return JsonResponse(data, status=400)
class ExamClone(ExamCloneMixin, ExamCreate):
- """Clone exam view"""
\ No newline at end of file
+ """Clone exam view"""
+