admin.py 2.22 KB
Newer Older
1
from ratelimitbackend import admin
2
from config_models.admin import ConfigurationModelAdmin
3 4 5
from verify_student.models import (
    SoftwareSecurePhotoVerification,
    InCourseReverificationConfiguration,
6 7
    VerificationStatus,
    SkippedReverification,
8
)
9

10 11 12 13 14 15

class SoftwareSecurePhotoVerificationAdmin(admin.ModelAdmin):
    """
    Admin for the SoftwareSecurePhotoVerification table.
    """
    list_display = ('id', 'user', 'status', 'receipt_id', 'submitted_at', 'updated_at')
16
    raw_id_fields = ('user', 'reviewing_user')
17 18 19 20 21 22 23 24 25
    search_fields = (
        'receipt_id',
    )


class VerificationStatusAdmin(admin.ModelAdmin):
    """
    Admin for the VerificationStatus table.
    """
26
    list_display = ('timestamp', 'user', 'status', 'checkpoint')
27
    readonly_fields = ()
28
    search_fields = ('checkpoint__checkpoint_location', 'user__username')
29
    raw_id_fields = ('user',)
30 31 32 33 34 35 36 37 38 39

    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:
40
            return self.readonly_fields + ('status', 'checkpoint', 'user', 'response', 'error')
41 42 43 44 45 46 47 48 49 50
        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')
51
    raw_id_fields = ('user',)
52
    readonly_fields = ('user', 'course_id')
53
    search_fields = ('user__username', 'course_id', 'checkpoint__checkpoint_location')
54 55 56 57

    def has_add_permission(self, request):
        """Skipped verifications can't be created in Django admin. """
        return False
58 59 60


admin.site.register(SoftwareSecurePhotoVerification, SoftwareSecurePhotoVerificationAdmin)
61 62
admin.site.register(InCourseReverificationConfiguration, ConfigurationModelAdmin)
admin.site.register(SkippedReverification, SkippedReverificationAdmin)
63
admin.site.register(VerificationStatus, VerificationStatusAdmin)