Commit 4f156dc0 by Will Daly

Updates to the verify student Django admin.

* Ensure that VerificationStatus is append-only and immutable.
* Allow searching by student for verification status.
* Properly pluralize verification status.
* Use ConfigModelAdmin for ICRV config model admin.
parent bd1e7a41
from ratelimitbackend import admin
from config_models.admin import ConfigurationModelAdmin
from verify_student.models import (
SoftwareSecurePhotoVerification,
InCourseReverificationConfiguration,
VerificationStatus
VerificationStatus,
SkippedReverification,
)
......@@ -20,12 +22,39 @@ class VerificationStatusAdmin(admin.ModelAdmin):
"""
Admin for the VerificationStatus table.
"""
list_display = ('id', 'user', 'status', 'checkpoint', 'location_id')
search_fields = (
'checkpoint',
)
list_display = ('timestamp', 'user', 'status', 'checkpoint', 'location_id')
readonly_fields = ()
search_fields = ('checkpoint', 'user')
def get_readonly_fields(self, request, obj=None):
"""When editing an existing record, all fields should be read-only.
VerificationStatus records should be immutable; to change the user's
status, create a new record with the updated status and a more
recent timestamp.
"""
if obj:
return self.readonly_fields + ('status', 'checkpoint', 'user', 'location_id', 'response', 'error')
return self.readonly_fields
def has_delete_permission(self, request, obj=None):
"""The verification status table is append-only. """
return False
class SkippedReverificationAdmin(admin.ModelAdmin):
"""Admin for the SkippedReverification table. """
list_display = ('created_at', 'user', 'course_id', 'checkpoint')
readonly_fields = ('user', 'course_id')
search_fields = ('user', 'course_id', 'checkpoint')
def has_add_permission(self, request):
"""Skipped verifications can't be created in Django admin. """
return False
admin.site.register(SoftwareSecurePhotoVerification, SoftwareSecurePhotoVerificationAdmin)
admin.site.register(InCourseReverificationConfiguration)
admin.site.register(InCourseReverificationConfiguration, ConfigurationModelAdmin)
admin.site.register(SkippedReverification, SkippedReverificationAdmin)
admin.site.register(VerificationStatus, VerificationStatusAdmin)
......@@ -974,6 +974,13 @@ class VerificationCheckpoint(models.Model):
class Meta: # pylint: disable=missing-docstring, old-style-class
unique_together = (('course_id', 'checkpoint_name'),)
def __unicode__(self):
"""Unicode representation of the checkpoint. """
return u"{checkpoint} in {course}".format(
checkpoint=self.checkpoint_name,
course=self.course_id
)
def add_verification_attempt(self, verification_attempt):
""" Add the verification attempt in M2M relation of photo_verification
......@@ -1047,6 +1054,8 @@ class VerificationStatus(models.Model):
class Meta(object): # pylint: disable=missing-docstring
get_latest_by = "timestamp"
verbose_name = "Verification Status"
verbose_name_plural = "Verification Statuses"
@classmethod
def add_verification_status(cls, checkpoint, user, status, location_id=None):
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment