---
url: "https://vueda.dev/v3/reference/api/py/vueda.workflow.models/WorkflowPermission.md"
title: "WorkflowPermission"
---

# WorkflowPermission

## Overview

One permission that a user must hold to use a workflow's transitions.

``check_workflow_permission`` passes only when the workflow has at least one row and the user
holds every permission that the rows name. Given ``obj``, it hands the object to ``has_perms``,
so state rules and row-level hooks decide for that object. A workflow with no rows denies every user,
superusers included; only programmatic use (``user=None``) skips the check.

## `DoesNotExist` {#DoesNotExist}

The requested object does not exist

### Source {#DoesNotExist-source}

`server/vueda/workflow/models.py`

## `MultipleObjectsReturned` {#MultipleObjectsReturned}

The query returned multiple objects when only one was expected.

### Source {#MultipleObjectsReturned-source}

`server/vueda/workflow/models.py`

## `NotUpdated` {#NotUpdated}

The updated object no longer exists.

### Source {#NotUpdated-source}

`server/vueda/workflow/models.py`

## `historical_permission_codename` {#historical_permission_codename}

A wrapper for a deferred-loading field. When the value is read from this
object the first time, the query is executed.

### Signature {#historical_permission_codename-signature}

`historical_permission_codename(unknown)`

#### Parameters {#historical_permission_codename-parameters}

| Name | Type | Required | Default | Description |
| --- | --- | --- | --- | --- |
| <span id="historical_permission_codename-param-unknown">unknown</span> |  | yes |  |  |

## `historical_permission_content_type_app_label` {#historical_permission_content_type_app_label}

A wrapper for a deferred-loading field. When the value is read from this
object the first time, the query is executed.

### Signature {#historical_permission_content_type_app_label-signature}

`historical_permission_content_type_app_label(unknown)`

#### Parameters {#historical_permission_content_type_app_label-parameters}

| Name | Type | Required | Default | Description |
| --- | --- | --- | --- | --- |
| <span id="historical_permission_content_type_app_label-param-unknown">unknown</span> |  | yes |  |  |

## `historical_permission_content_type_model_name` {#historical_permission_content_type_model_name}

A wrapper for a deferred-loading field. When the value is read from this
object the first time, the query is executed.

### Signature {#historical_permission_content_type_model_name-signature}

`historical_permission_content_type_model_name(unknown)`

#### Parameters {#historical_permission_content_type_model_name-parameters}

| Name | Type | Required | Default | Description |
| --- | --- | --- | --- | --- |
| <span id="historical_permission_content_type_model_name-param-unknown">unknown</span> |  | yes |  |  |

## `id` {#id}

A wrapper for a deferred-loading field. When the value is read from this
object the first time, the query is executed.

### Signature {#id-signature}

`id(unknown)`

#### Parameters {#id-parameters}

| Name | Type | Required | Default | Description |
| --- | --- | --- | --- | --- |
| <span id="id-param-unknown">unknown</span> |  | yes |  |  |

## `objects` {#objects}

### Signature {#objects-signature}

`objects(unknown)`

#### Parameters {#objects-parameters}

| Name | Type | Required | Default | Description |
| --- | --- | --- | --- | --- |
| <span id="objects-param-unknown">unknown</span> |  | yes |  |  |

## `pgh_event_model` {#pgh_event_model}

A descriptor for accessing the pgh_event_model field on a tracked model

### Signature {#pgh_event_model-signature}

`pgh_event_model(unknown)`

#### Parameters {#pgh_event_model-parameters}

| Name | Type | Required | Default | Description |
| --- | --- | --- | --- | --- |
| <span id="pgh_event_model-param-unknown">unknown</span> |  | yes |  |  |

## `save` {#save}

Save the current instance. Override this in a subclass if you want to
control the saving process.

The 'force_insert' and 'force_update' parameters can be used to insist
that the "save" must be an SQL insert or update (or equivalent for
non-SQL backends), respectively. Normally, they should not be set.

### Signature {#save-signature}

`save(self, kwargs)`

#### Parameters {#save-parameters}

| Name | Type | Required | Default | Description |
| --- | --- | --- | --- | --- |
| self |  | yes |  |  |
| <span id="save-param-kwargs">kwargs</span> |  | no |  |  |

### Source {#save-source}

`server/vueda/workflow/models.py:147`

## `events` {#events}

Accessor to the related objects manager on the reverse side of a
many-to-one relation.

In the example::

    class Child(Model):
        parent = ForeignKey(Parent, related_name='children')

``Parent.children`` is a ``ReverseManyToOneDescriptor`` instance.

Most of the implementation is delegated to a dynamically defined manager
class built by ``create_reverse_many_to_one_manager()`` defined below.

## `permission` {#permission}

Accessor to the related object on the forward side of a many-to-one or
one-to-one (via ForwardOneToOneDescriptor subclass) relation.

In the example::

    class Child(Model):
        parent = ForeignKey(Parent, related_name='children')

``Child.parent`` is a ``ForwardManyToOneDescriptor`` instance.

## `permission_id` {#permission_id}

## `pgh_event_models` {#pgh_event_models}

## `workflow` {#workflow}

Accessor to the related object on the forward side of a many-to-one or
one-to-one (via ForwardOneToOneDescriptor subclass) relation.

In the example::

    class Child(Model):
        parent = ForeignKey(Parent, related_name='children')

``Child.parent`` is a ``ForwardManyToOneDescriptor`` instance.

## `workflow_id` {#workflow_id}

## Source

`server/vueda/workflow/models.py:94`
