recordtransfer.admin - Manage record transfer models in admin site

Custom administration code for the admin site.

recordtransfer.admin.linkify(field_name: str) Callable

Convert a foreign key value into clickable links.

If field_name is ‘parent’, link text will be str(obj.parent) Link will be admin url for the admin url for obj.parent.id:change

recordtransfer.admin.job_file_delete(sender: Job, instance: Job, **kwargs) None

FileFields are not deleted automatically after Django 1.11, instead this receiver does it.

class recordtransfer.admin.ReadOnlyAdmin(model, admin_site)

Bases: ModelAdmin

A model admin that does not allow any editing/changing/ or deletions.

Permissions:
  • add: Not allowed

  • change: Not allowed

  • delete: Not allowed

readonly_fields: Sequence[str | Callable] = []
get_readonly_fields(request: HttpRequest, obj: object = None) tuple

Return all fields as read-only for this model admin.

has_add_permission(request: HttpRequest) bool

Determine whether add permission is granted for this model admin.

has_change_permission(request: HttpRequest, obj: object = None) bool

Determine whether change permission is granted for this model admin.

has_delete_permission(request: HttpRequest, obj: object = None) bool

Determine whether delete permission is granted for this model admin.

property media
class recordtransfer.admin.ReadOnlyInline(parent_model, admin_site)

Bases: TabularInline

Inline admin that does not allow any editing/changing/ or deletions.

Permissions:
  • add: Not allowed

  • change: Not allowed

  • delete: Not allowed

max_num = 0
has_add_permission(request: HttpRequest, obj: object = None) bool

Determine whether add permission is granted for this model admin.

has_change_permission(request: HttpRequest, obj: object = None) bool

Determine whether change permission is granted for this model admin.

has_delete_permission(request: HttpRequest, obj: object = None) bool

Determine whether delete permission is granted for this model admin.

property media
class recordtransfer.admin.SubmissionInline(parent_model, admin_site)

Bases: ReadOnlyInline

Inline admin for the Submission model.

Permissions:
  • add: Not allowed

  • change: Not allowed - go to Submission page for change ability

  • delete: Only by superusers

model

alias of Submission

fields: Sequence[str | Sequence[str]] = ['uuid', 'metadata']
ordering: Sequence[str] | None = ['-submission_date']
has_delete_permission(request: HttpRequest, obj: object = None) bool

Determine whether delete permission is granted for this inline admin. Returns True if the object exists and the requesting user is a superuser, otherwise False.

property media
class recordtransfer.admin.SubmissionGroupAdmin(model, admin_site)

Bases: ReadOnlyAdmin

Admin for the SubmissionGroup model. Submissions can be viewed in-line.

Permissions:
  • add: Not allowed

  • change: Not allowed

  • delete: Only by superusers

list_display: Sequence[str | Callable] = ['name', <function linkify.<locals>._linkify>, 'number_of_submissions_in_group']
inlines: Sequence[type[InlineModelAdmin]] = [<class 'recordtransfer.admin.SubmissionInline'>]
search_fields: Sequence[str] = ['name', 'uuid']
ordering: Sequence[str] | None = ['-created_by']
actions: Sequence[Callable[[Any, HttpRequest, QuerySet], HttpResponse | None] | str] | None = ['export_caais_csv', 'export_atom_2_6_csv', 'export_atom_2_3_csv', 'export_atom_2_2_csv', 'export_atom_2_1_csv']
view_on_site = False
has_delete_permission(request: HttpRequest, obj: object = None) bool

Determine whether delete permission is granted for this model admin. Returns True if the object exists and the requesting user is a superuser, otherwise False.

export_caais_csv(request: HttpRequest, queryset: QuerySet) HttpResponse | None

Export CAAIS 1.0 CSV for submissions in the selected queryset.

export_atom_2_6_csv(request: HttpRequest, queryset: QuerySet) HttpResponse | None

Export AtoM 2.6 Accession CSV for submissions in the selected queryset.

export_atom_2_3_csv(request: HttpRequest, queryset: QuerySet) HttpResponse | None

Export AtoM 2.3 Accession CSV for submissions in the selected queryset.

export_atom_2_2_csv(request: HttpRequest, queryset: QuerySet) HttpResponse | None

Export AtoM 2.2 Accession CSV for submissions in the selected queryset.

export_atom_2_1_csv(request: HttpRequest, queryset: QuerySet) HttpResponse | None

Export AtoM 2.1 Accession CSV for submissions in the selected queryset.

property media
class recordtransfer.admin.SubmissionGroupInline(parent_model, admin_site)

Bases: ReadOnlyInline

Inline admin for viewing submission groups.

Permissions:
  • add: Not allowed

  • change: Not allowed - go to SubmissionGroup page for change ability

  • delete: Not allowed - go to SubmissionGroup page for delete ability

model

alias of SubmissionGroup

fields: Sequence[str | Sequence[str]] = ['name', 'description', 'number_of_submissions_in_group']
readonly_fields: Sequence[str | Callable] = ['number_of_submissions_in_group']
property media
class recordtransfer.admin.SubmissionAdmin(model, admin_site)

Bases: ModelAdmin

Admin for the Submission model.

Permissions:
  • add: Not allowed

  • change: Allowed

  • delete: Only by superusers

change_form_template = 'admin/submission_change_form.html'
form

alias of SubmissionModelForm

actions: Sequence[Callable[[Any, HttpRequest, QuerySet], HttpResponse | None] | str] | None = ['export_caais_csv', 'export_atom_2_6_csv', 'export_atom_2_3_csv', 'export_atom_2_2_csv', 'export_atom_2_1_csv']
search_fields: Sequence[str] = ['uuid', 'metadata__accession_title', 'user__username', 'user__email']
list_display: Sequence[str | Callable] = ['submission_date', 'uuid', 'file_count', <function linkify.<locals>._linkify>, <function linkify.<locals>._linkify>]
ordering: Sequence[str] | None = ['-submission_date']
readonly_fields: Sequence[str | Callable] = ['submission_date', 'user', 'upload_session', 'part_of_group', 'uuid']
file_count(obj: Submission) str

Display the number of files uploaded to the submission.

has_add_permission(request: HttpRequest) bool

Determine whether add permission is granted for this model admin.

has_change_permission(request: HttpRequest, obj: object = None) bool

Determine whether change permission is granted for this model admin.

has_delete_permission(request: HttpRequest, obj: object = None) bool

Determine whether delete permission is granted for this model admin.

get_urls() list

Add extra views to admin.

get_form(request: HttpRequest, obj: Submission | None = None, change: bool = False, **kwargs) type[ModelForm]

Conditionally add help_text to upload_session if one exists.

create_zipped_bag(request: HttpRequest, object_id: str) HttpResponseRedirect

Start a background job to create a downloadable bag.

Parameters:
  • request – The originating request

  • object_id – The ID for the submission

export_caais_csv(request: HttpRequest, queryset: QuerySet) HttpResponse

Export CAAIS 1.0 CSV for submissions in the selected queryset.

export_atom_2_6_csv(request: HttpRequest, queryset: QuerySet) HttpResponse

Export AtoM 2.6 Accession CSV for submissions in the selected queryset.

export_atom_2_3_csv(request: HttpRequest, queryset: QuerySet) HttpResponse

Export AtoM 2.3 Accession CSV for submissions in the selected queryset.

export_atom_2_2_csv(request: HttpRequest, queryset: QuerySet) HttpResponse

Export AtoM 2.2 Accession CSV for submissions in the selected queryset.

export_atom_2_1_csv(request: HttpRequest, queryset: QuerySet) HttpResponse

Export AtoM 2.1 Accession CSV for submissions in the selected queryset.

property media
class recordtransfer.admin.JobAdmin(model, admin_site)

Bases: ReadOnlyAdmin

Admin for the Job model.

Permissions:
  • add: Not allowed

  • change: Not allowed

  • delete: Only superusers

fields: Sequence[str | Sequence[str]] = ['uuid', 'name', 'description', 'start_time', 'end_time', 'user_triggered', 'job_status', 'file_url', 'message_log']
list_display: Sequence[str | Callable] = ['name', 'start_time', 'user_triggered', 'job_status']
search_fields: Sequence[str] = ['name', 'description', 'user_triggered__username', 'user_triggered__email', 'user_triggered__first_name', 'user_triggered__last_name']
ordering: Sequence[str] | None = ['-start_time']
file_url(obj: Job) SafeString

Return the URL to access the file, or a message if there is no file associated with the job.

has_delete_permission(request: HttpRequest, obj: object = None) bool

Determine whether delete permission is granted for this model admin.

property media
class recordtransfer.admin.CustomUserAdmin(model, admin_site)

Bases: UserAdmin

Admin for the User model.

Permissions:
  • add: Allowed by superusers only

  • change: Allowed by superusers only. Others update their user info in the Profile page.

  • delete: Allowed by superusers only

form

alias of UserAdminForm

fieldsets = ((None, {'fields': ('username', 'password')}), ('Personal info', {'fields': ('first_name', 'last_name', 'email')}), ('Permissions', {'fields': ('is_active', 'is_staff', 'is_superuser', 'groups', 'user_permissions')}), ('Important dates', {'fields': ('last_login', 'date_joined')}), ('Contact Information', {'fields': ('phone_number', 'address_line_1', 'address_line_2', 'city', 'province_or_state', 'other_province_or_state', 'postal_or_zip_code', 'country')}), ('Language Preferences', {'fields': ('language',)}), ('Email Updates', {'fields': ('gets_submission_email_updates',)}))
inlines: Sequence[type[InlineModelAdmin]] = [<class 'recordtransfer.admin.SubmissionInline'>, <class 'recordtransfer.admin.SubmissionGroupInline'>]
has_add_permission(request: HttpRequest) bool

Determine whether add permission is granted for this user admin.

has_change_permission(request: HttpRequest, obj: object = None) bool

Determine whether change permission is granted for this user admin.

has_delete_permission(request: HttpRequest, obj: object = None) bool

Determine whether delete permission is granted for this user admin.

changeform_view(request: HttpRequest, object_id: str | None = None, form_url: str = '', extra_context: dict | None = None) TemplateResponse

Add JS context for contact info form.

user_change_password(request: HttpRequest, id: str, form_url: str = '') HttpResponse

Send a notification email when a user’s password is changed.

save_model(request: HttpRequest, obj: User, form: ModelForm, change: bool) None

Enforce superuser permissions checks and send notification emails for other account updates.

property media
class recordtransfer.admin.SiteSettingAdmin(model, admin_site)

Bases: ModelAdmin

Admin for the SiteSetting model.

Permissions:
  • add: Not allowed

  • change: Only by superusers

  • delete: Not allowed

list_display: Sequence[str | Callable] = ['key', 'value_type', 'value', 'change_date']
search_fields: Sequence[str] = ['key', 'value']
readonly_fields: Sequence[str | Callable] = ['key', 'value_type', 'change_date', 'changed_by']
form

alias of SiteSettingModelForm

change_form_template = 'admin/sitesetting_change_form.html'
save_model(request: HttpRequest, obj: SiteSetting, form: ModelForm, change: bool) None

Override save_model to set the changed_by field.

changeform_view(request: HttpRequest, object_id: str | None = None, form_url: str | None = '', extra_context: dict | None = None) TemplateResponse

Add custom context to the change form.

response_change(request: HttpRequest, obj: SiteSetting) HttpResponse

Mimic save and continue on POST when resetting setting.

has_add_permission(request: HttpRequest) bool

Prevent adding new site settings through the admin interface.

has_change_permission(request: HttpRequest, obj: object = None) bool

Allow modification of site settings only by superusers.

has_delete_permission(request: object, obj: object = None) bool

Prevent deletion of site settings through the admin interface.

property media