Skip to content

Admin views

hypha.apply.users.admin_views

User module-attribute

User = get_user_model()

add_user_perm module-attribute

add_user_perm = format(AUTH_USER_APP_LABEL, lower())

change_user_perm module-attribute

change_user_perm = format(AUTH_USER_APP_LABEL, lower())

delete_user_perm module-attribute

delete_user_perm = format(AUTH_USER_APP_LABEL, lower())

UserFilterSet

Bases: WagtailFilterSet

STATUS_CHOICES class-attribute instance-attribute

STATUS_CHOICES = (('inactive', 'INACTIVE'), ('active', 'ACTIVE'))

roles class-attribute instance-attribute

roles = ModelChoiceFilter(queryset=all(), label='Roles', method='filter_by_roles')

status class-attribute instance-attribute

status = ChoiceFilter(choices=STATUS_CHOICES, label='Status', method='filter_by_status')

Meta

model class-attribute instance-attribute
model = User
fields class-attribute instance-attribute
fields = ['roles', 'status', 'is_superuser']

filter_by_roles

filter_by_roles(queryset, name, value)
Source code in hypha/apply/users/admin_views.py
def filter_by_roles(self, queryset, name, value):
    queryset = queryset.filter(groups__name=value)
    return queryset

filter_by_status

filter_by_status(queryset, name, value)
Source code in hypha/apply/users/admin_views.py
def filter_by_status(self, queryset, name, value):
    if value == "active":
        return queryset.filter(is_active=True)
    elif value == "inactive":
        return queryset.filter(is_active=False)
    return queryset

CustomUserIndexView

Bases: IndexView

list_export class-attribute instance-attribute

list_export = ['email', 'full_name', 'slack', 'roles', 'is_superuser', 'is_active', 'date_joined', 'last_login']

columns

columns()
Source code in hypha/apply/users/admin_views.py
@cached_property
def columns(self):
    # Override to add roles column
    _UserColumn = self._get_title_column_class(UserColumn)
    return [
        BulkActionsCheckboxColumn("bulk_actions", obj_type="user"),
        _UserColumn(
            "name",
            accessor=lambda u: get_user_display_name(u),
            label=gettext_lazy("Name"),
            get_url=self.get_edit_url,
            classname="name",
        ),
        Column(
            self.model.USERNAME_FIELD,
            accessor="get_username",
            label=gettext_lazy("Username"),
            sort_key=self.model.USERNAME_FIELD,
            classname="username",
            width="20%",
        ),
        Column(
            "is_superuser",
            accessor=lambda u: gettext_lazy("Admin") if u.is_superuser else None,
            label=gettext_lazy("Access level"),
            sort_key="is_superuser",
            classname="level",
            width="10%",
        ),
        Column(
            "roles",
            accessor=lambda u: ", ".join(u.roles),
            label=gettext_lazy("Roles"),
            classname="level",
            width="10%",
        ),
        StatusTagColumn(
            "is_active",
            accessor=lambda u: gettext_lazy("Active")
            if u.is_active
            else gettext_lazy("Inactive"),
            primary=lambda u: u.is_active,
            label=gettext_lazy("Status"),
            sort_key="is_active" if "is_active" in self.model_fields else None,
            classname="status",
            width="10%",
        ),
        DateColumn(
            "last_login",
            label=gettext_lazy("Last login"),
            sort_key="last_login",
            classname="last-login",
            width="10%",
        ),
    ]

get_base_queryset

get_base_queryset()
Source code in hypha/apply/users/admin_views.py
def get_base_queryset(self):
    users = User._default_manager.all()

    users = users.annotate(
        display_name=Coalesce(
            NullIf("full_name", Value("")), "email", output_field=CharField()
        ),
    )

    if "wagtail_userprofile" in self.model_fields:
        users = users.select_related("wagtail_userprofile")

    return users

order_queryset

order_queryset(queryset)
Source code in hypha/apply/users/admin_views.py
def order_queryset(self, queryset):
    if self.ordering == "name":
        return queryset.order_by(Lower("display_name"))
    if self.ordering == "-name":
        return queryset.order_by(Lower("display_name"))
    return super().order_queryset(queryset)

CustomUserViewSet

Bases: UserViewSet

filterset_class class-attribute instance-attribute

filterset_class = UserFilterSet

index_view_class class-attribute instance-attribute

index_view_class = CustomUserIndexView

get_form_class

get_form_class(for_update=False)
Source code in hypha/apply/users/admin_views.py
def get_form_class(self, for_update=False):
    if for_update:
        return CustomUserEditForm
    return CustomUserCreationForm

CustomGroupIndexView

Bases: IndexView

Overriding of wagtail.users.views.groups.IndexView to allow for the addition of help text to the displayed group names. This is done utilizing the get_queryset method

model class-attribute instance-attribute

model = Group

get_queryset

get_queryset()

Overriding the normal queryset that would return all Group objects, this returned an iterable of groups with custom names containing HTML help text.

Source code in hypha/apply/users/admin_views.py
def get_queryset(self):
    """
    Overriding the normal queryset that would return all Group objects, this returned an iterable of groups with custom names containing HTML help text.
    """
    group_qs = super().get_queryset()

    custom_groups = []

    for group in group_qs:
        # Check if the group is a role
        help_text = getattr(
            roles.registered_roles.get(group.name, {}), "help_text", ""
        )
        if help_text:
            group.name = mark_safe(
                f"{group.name}<p class=group-help-text>{help_text}</p>"
            )

        custom_groups.append(group)

    return custom_groups

CustomGroupEditView

Bases: EditView

header_buttons

header_buttons()
Source code in hypha/apply/users/admin_views.py
@cached_property
def header_buttons(self):
    return [
        HeaderButton(
            gettext("View users in this group"),
            url=set_query_params(
                reverse("wagtailusers_users:index"),
                {"roles": self.object.pk},
            ),
            icon_name="user",
        )
    ]

CustomGroupViewSet

CustomGroupViewSet(name, **kwargs)

Bases: GroupViewSet

Overriding the wagtail.users.views.groups.GroupViewSet just to use custom users view(index) when getting all users for a group.

Source code in hypha/apply/users/admin_views.py
def __init__(self, name, **kwargs):
    super().__init__(name, **kwargs)

index_view_class class-attribute instance-attribute

index_view_class = CustomGroupIndexView

edit_view_class class-attribute instance-attribute

edit_view_class = CustomGroupEditView

users_view property

users_view

users_results_view property

users_results_view