# addons.Addon

## Model Info

| Key | Value |
|---|-----|
| Model Name | Addon |
| Verbose Name | addon |
| Verbose Name Plural | addons |
| Docstring | <p>Addon(created, modified, id, guid, slug, name, default\_locale, type, status, icon\_type, icon\_hash, homepage, support\_email, support\_url, description, summary, developer\_comments, eula, privacy\_policy, average\_rating, bayesian\_rating, total\_ratings, text\_ratings\_count, weekly\_downloads, hotness, average\_daily\_users, last\_updated, disabled\_by\_user, target\_locale, contributions, \_current\_version, is\_experimental, reputation, requires\_payment)</p> |
| Is Abstract | False |
| Is Proxy | False |
| Is Managed | True |
| Ordering | [] |
| Permissions | [] |
| Default Permissions | ('add', 'change', 'delete', 'view') |
| Indexes | [<Index: fields=['bayesian_rating'] name='bayesianrating'>, <Index: fields=['created'] name='addons_created_idx'>, <Index: fields=['_current_version'] name='current_version'>, <Index: fields=['disabled_by_user'] name='inactive'>, <Index: fields=['hotness'] name='hotness_idx'>, <Index: fields=['last_updated'] name='last_updated'>, <Index: fields=['modified'] name='modified_idx'>, <Index: fields=['status'] name='addons_status_idx'>, <Index: fields=['target_locale'] name='target_locale'>, <Index: fields=['type'] name='addontype_id'>, <Index: fields=['weekly_downloads'] name='weeklydownloads_idx'>, <Index: fields=['average_daily_users', 'type'] name='adus_type_idx'>, <Index: fields=['bayesian_rating', 'type'] name='rating_type_idx'>, <Index: fields=['created', 'type'] name='created_type_idx'>, <Index: fields=['last_updated', 'type'] name='last_updated_type_idx'>, <Index: fields=['modified', 'type'] name='modified_type_idx'>, <Index: fields=['type', 'status', 'disabled_by_user'] name='type_status_inactive_idx'>, <Index: fields=['weekly_downloads', 'type'] name='downloads_type_idx'>, <Index: fields=['type', 'status', 'disabled_by_user', '_current_version'] name='visible_idx'>, <Index: fields=['name', 'status', 'type'] name='name_2'>] |
| Constraints | [] |
| Database Table | addons |
| Base Manager | unfiltered |
| Default Manager | None |
| File | /data/olympia/src/olympia/addons/models.py |
| Starting Line Number | 491 |
| Method Resolution Order | (<class 'olympia.addons.models.Addon'>, <class 'olympia.amo.models.OnChangeMixin'>, <class 'olympia.amo.models.ModelBase'>, <class 'olympia.amo.models.SaveUpdateMixin'>, <class 'django.db.models.base.Model'>, <class 'django.db.models.utils.AltersData'>, <class 'object'>) |

## Fields

| Field Name | Field Type | Database Column | Database Type | Verbose Name |
|----------|----------|---------------|-------------|------------|
| `BannedUserContent_addons+` | ManyToOneRel |  | integer UNSIGNED |  |
| `_current_version` | ForeignKey | current_version | integer UNSIGNED |  current version |
| `_ratings` | ManyToOneRel |  | integer UNSIGNED |  |
| `addon_tags` | ManyToOneRel |  | integer UNSIGNED |  |
| `addonapprovalscounter` | OneToOneRel |  | integer UNSIGNED |  |
| `addonbrowsermapping` | ManyToOneRel |  | integer UNSIGNED |  |
| `addoncategory` | ManyToOneRel |  | integer UNSIGNED |  |
| `addonguid` | OneToOneRel |  | integer UNSIGNED |  |
| `addonlog` | ManyToOneRel |  | integer UNSIGNED |  |
| `addonuser` | ManyToOneRel |  | integer UNSIGNED |  |
| `addonuserpendingconfirmation` | ManyToOneRel |  | integer UNSIGNED |  |
| `authors` | FilterableManyToManyField | authors | through addons.AddonUser | authors |
| `average_daily_users` | PositiveIntegerField | average_daily_users | integer UNSIGNED | average daily users |
| `average_rating` | FloatField | averagerating | double precision | average rating |
| `bannedusercontent` | ManyToManyRel |  | through users.BannedUserContent_addons |  |
| `bayesian_rating` | FloatField | bayesianrating | double precision | bayesian rating |
| `cinderjob` | ManyToOneRel |  | integer UNSIGNED |  |
| `collectionaddon` | ManyToOneRel |  | integer UNSIGNED |  |
| `collections` | ManyToManyRel |  | through bandwagon.CollectionAddon |  |
| `content_deleted_on_force_disable` | OneToOneRel |  | integer UNSIGNED |  |
| `contributions` | URLField | contributions | varchar(255) | contributions |
| `created` | DateTimeField | created | datetime(6) | created |
| `decisions_on` | ManyToOneRel |  | integer UNSIGNED |  |
| `default_locale` | CharField | defaultlocale | varchar(10) | default locale |
| `description` | PurifiedMarkdownField | description | integer UNSIGNED | description |
| `developer_comments` | PurifiedMarkdownField | developercomments | integer UNSIGNED | developer comments |
| `disabled_by_user` | BooleanField | inactive | bool | disabled by user |
| `discoveryitem` | OneToOneRel |  | integer UNSIGNED |  |
| `eula` | PurifiedMarkdownField | eula | integer UNSIGNED | eula |
| `fileupload` | ManyToOneRel |  | integer UNSIGNED |  |
| `frozenaddon` | ManyToOneRel |  | integer UNSIGNED |  |
| `guid` | CharField | guid | varchar(255) | guid |
| `homepage` | TranslatedField | homepage | integer UNSIGNED | homepage |
| `hotness` | FloatField | hotness | double precision | hotness |
| `icon_hash` | CharField | icon_hash | varchar(8) | icon hash |
| `icon_type` | CharField | icontype | varchar(25) | icon type |
| `id (pk)` | PositiveAutoField | id | integer UNSIGNED AUTO_INCREMENT | id |
| `is_experimental` | BooleanField | experimental | bool | is experimental |
| `last_updated` | DateTimeField | last_updated | datetime(6) | last updated |
| `migrated_from_lwt` | ManyToOneRel |  | integer UNSIGNED |  |
| `modified` | DateTimeField | modified | datetime(6) | modified |
| `name` | TranslatedField | name | integer UNSIGNED | name |
| `previews` | ManyToOneRel |  | integer UNSIGNED |  |
| `primaryhero` | OneToOneRel |  | integer UNSIGNED |  |
| `privacy_policy` | PurifiedMarkdownField | privacypolicy | integer UNSIGNED | privacy policy |
| `promotedaddon` | ManyToOneRel |  | integer UNSIGNED |  |
| `ratingaggregate` | OneToOneRel |  | integer UNSIGNED |  |
| `regional_restrictions` | OneToOneRel |  | integer UNSIGNED |  |
| `reputation` | SmallIntegerField | reputation | smallint | reputation |
| `requires_payment` | BooleanField | requires_payment | bool | requires payment |
| `reviewerflags` | OneToOneRel |  | integer UNSIGNED |  |
| `reviewersubscription` | ManyToOneRel |  | integer UNSIGNED |  |
| `rsskey` | ManyToOneRel |  | integer UNSIGNED |  |
| `slug` | CharField | slug | varchar(30) | slug |
| `status` | PositiveIntegerField | status | integer UNSIGNED | status |
| `summary` | NoURLsField | summary | integer UNSIGNED | summary |
| `support_email` | TranslatedField | supportemail | integer UNSIGNED | support email |
| `support_url` | TranslatedField | supporturl | integer UNSIGNED | support url |
| `tags` | ManyToManyRel |  | through tags.AddonTag |  |
| `target_locale` | CharField | target_locale | varchar(255) | target locale |
| `text_ratings_count` | PositiveIntegerField | textreviewscount | integer UNSIGNED | text ratings count |
| `total_ratings` | PositiveIntegerField | totalreviews | integer UNSIGNED | total ratings |
| `type` | PositiveIntegerField | addontype_id | integer UNSIGNED | type |
| `versions` | ManyToOneRel |  | integer UNSIGNED |  |
| `weekly_downloads` | PositiveIntegerField | weeklydownloads | integer UNSIGNED | weekly downloads |
| `whiteboard` | OneToOneRel |  | integer UNSIGNED |  |

## Relations

| Field Name | Field Type | Database Column | Database Type | Related Model | Related Name |
|----------|----------|---------------|-------------|-------------|------------|
| `_current_version` | ForeignKey | current_version | integer UNSIGNED | versions.Version | + |
| `authors` | FilterableManyToManyField | authors | through addons.AddonUser | users.UserProfile | addons |
| `description` | PurifiedMarkdownField | description | integer UNSIGNED | translations.PurifiedMarkdownTranslation | Addon_description_set+ |
| `developer_comments` | PurifiedMarkdownField | developercomments | integer UNSIGNED | translations.PurifiedMarkdownTranslation | Addon_developer_comments_set+ |
| `eula` | PurifiedMarkdownField | eula | integer UNSIGNED | translations.PurifiedMarkdownTranslation | Addon_eula_set+ |
| `homepage` | TranslatedField | homepage | integer UNSIGNED | translations.Translation | Addon_homepage_set+ |
| `name` | TranslatedField | name | integer UNSIGNED | translations.Translation | Addon_name_set+ |
| `privacy_policy` | PurifiedMarkdownField | privacypolicy | integer UNSIGNED | translations.PurifiedMarkdownTranslation | Addon_privacy_policy_set+ |
| `summary` | NoURLsField | summary | integer UNSIGNED | translations.NoURLsTranslation | Addon_summary_set+ |
| `support_email` | TranslatedField | supportemail | integer UNSIGNED | translations.Translation | Addon_support_email_set+ |
| `support_url` | TranslatedField | supporturl | integer UNSIGNED | translations.Translation | Addon_support_url_set+ |

fields_reverse_relation=[FieldReverseRelation(name='addon_set', field_type='ManyToOneRel', field_db_type='integer UNSIGNED', related_model='abuse.CinderJob', field_name_on_related_model='target_addon', field_type_on_related_model='ForeignKey'), FieldReverseRelation(name='decisions_on', field_type='ManyToOneRel', field_db_type='integer UNSIGNED', related_model='abuse.ContentDecision', field_name_on_related_model='addon', field_type_on_related_model='ForeignKey'), FieldReverseRelation(name='addon_set', field_type='ManyToOneRel', field_db_type='integer UNSIGNED', related_model='activity.AddonLog', field_name_on_related_model='addon', field_type_on_related_model='ForeignKey'), FieldReverseRelation(name='reviewerflags', field_type='OneToOneRel', field_db_type='integer UNSIGNED', related_model='addons.AddonReviewerFlags', field_name_on_related_model='addon', field_type_on_related_model='OneToOneField'), FieldReverseRelation(name='regional_restrictions', field_type='OneToOneRel', field_db_type='integer UNSIGNED', related_model='addons.AddonRegionalRestrictions', field_name_on_related_model='addon', field_type_on_related_model='OneToOneField'), FieldReverseRelation(name='migrated_from_lwt', field_type='ManyToOneRel', field_db_type='integer UNSIGNED', related_model='addons.MigratedLWT', field_name_on_related_model='static_theme', field_type_on_related_model='ForeignKey'), FieldReverseRelation(name='addon_set', field_type='ManyToOneRel', field_db_type='integer UNSIGNED', related_model='addons.AddonCategory', field_name_on_related_model='addon', field_type_on_related_model='ForeignKey'), FieldReverseRelation(name='addon_set', field_type='ManyToOneRel', field_db_type='integer UNSIGNED', related_model='addons.AddonUser', field_name_on_related_model='addon', field_type_on_related_model='ForeignKey'), FieldReverseRelation(name='addon_set', field_type='ManyToOneRel', field_db_type='integer UNSIGNED', related_model='addons.AddonUserPendingConfirmation', field_name_on_related_model='addon', field_type_on_related_model='ForeignKey'), FieldReverseRelation(name='addon_set', field_type='OneToOneRel', field_db_type='integer UNSIGNED', related_model='addons.AddonApprovalsCounter', field_name_on_related_model='addon', field_type_on_related_model='OneToOneField'), FieldReverseRelation(name='previews', field_type='ManyToOneRel', field_db_type='integer UNSIGNED', related_model='addons.Preview', field_name_on_related_model='addon', field_type_on_related_model='ForeignKey'), FieldReverseRelation(name='addon_set', field_type='ManyToOneRel', field_db_type='integer UNSIGNED', related_model='addons.FrozenAddon', field_name_on_related_model='addon', field_type_on_related_model='ForeignKey'), FieldReverseRelation(name='addon_set', field_type='OneToOneRel', field_db_type='integer UNSIGNED', related_model='addons.AddonGUID', field_name_on_related_model='addon', field_type_on_related_model='OneToOneField'), FieldReverseRelation(name='addon_set', field_type='ManyToOneRel', field_db_type='integer UNSIGNED', related_model='addons.AddonBrowserMapping', field_name_on_related_model='addon', field_type_on_related_model='ForeignKey'), FieldReverseRelation(name='content_deleted_on_force_disable', field_type='OneToOneRel', field_db_type='integer UNSIGNED', related_model='addons.DisabledAddonContent', field_name_on_related_model='addon', field_type_on_related_model='OneToOneField'), FieldReverseRelation(name='collections', field_type='ManyToManyRel', field_db_type='through bandwagon.CollectionAddon', related_model='bandwagon.Collection', field_name_on_related_model='addons', field_type_on_related_model='ManyToManyField'), FieldReverseRelation(name='addon_set', field_type='ManyToOneRel', field_db_type='integer UNSIGNED', related_model='bandwagon.CollectionAddon', field_name_on_related_model='addon', field_type_on_related_model='ForeignKey'), FieldReverseRelation(name='addon_set', field_type='ManyToOneRel', field_db_type='integer UNSIGNED', related_model='devhub.RssKey', field_name_on_related_model='addon', field_type_on_related_model='ForeignKey'), FieldReverseRelation(name='addon_set', field_type='OneToOneRel', field_db_type='integer UNSIGNED', related_model='discovery.DiscoveryItem', field_name_on_related_model='addon', field_type_on_related_model='OneToOneField'), FieldReverseRelation(name='addon_set', field_type='ManyToOneRel', field_db_type='integer UNSIGNED', related_model='files.FileUpload', field_name_on_related_model='addon', field_type_on_related_model='ForeignKey'), FieldReverseRelation(name='addon_set', field_type='OneToOneRel', field_db_type='integer UNSIGNED', related_model='hero.PrimaryHero', field_name_on_related_model='addon', field_type_on_related_model='OneToOneField'), FieldReverseRelation(name='promotedaddon', field_type='ManyToOneRel', field_db_type='integer UNSIGNED', related_model='promoted.PromotedAddon', field_name_on_related_model='addon', field_type_on_related_model='ForeignKey'), FieldReverseRelation(name='_ratings', field_type='ManyToOneRel', field_db_type='integer UNSIGNED', related_model='ratings.Rating', field_name_on_related_model='addon', field_type_on_related_model='ForeignKey'), FieldReverseRelation(name='addon_set', field_type='OneToOneRel', field_db_type='integer UNSIGNED', related_model='ratings.RatingAggregate', field_name_on_related_model='addon', field_type_on_related_model='OneToOneField'), FieldReverseRelation(name='addon_set', field_type='ManyToOneRel', field_db_type='integer UNSIGNED', related_model='reviewers.ReviewerSubscription', field_name_on_related_model='addon', field_type_on_related_model='ForeignKey'), FieldReverseRelation(name='addon_set', field_type='OneToOneRel', field_db_type='integer UNSIGNED', related_model='reviewers.Whiteboard', field_name_on_related_model='addon', field_type_on_related_model='OneToOneField'), FieldReverseRelation(name='tags', field_type='ManyToManyRel', field_db_type='through tags.AddonTag', related_model='tags.Tag', field_name_on_related_model='addons', field_type_on_related_model='ManyToManyField'), FieldReverseRelation(name='addon_tags', field_type='ManyToOneRel', field_db_type='integer UNSIGNED', related_model='tags.AddonTag', field_name_on_related_model='addon', field_type_on_related_model='ForeignKey'), FieldReverseRelation(name='BannedUserContent_addons+ (no reverse relation allowed)', field_type='ManyToOneRel', field_db_type='integer UNSIGNED', related_model='users.BannedUserContent_addons', field_name_on_related_model='addon', field_type_on_related_model='ForeignKey'), FieldReverseRelation(name='addon_set', field_type='ManyToManyRel', field_db_type='through users.BannedUserContent_addons', related_model='users.BannedUserContent', field_name_on_related_model='addons', field_type_on_related_model='ManyToManyField'), FieldReverseRelation(name='versions', field_type='ManyToOneRel', field_db_type='integer UNSIGNED', related_model='versions.Version', field_name_on_related_model='addon', field_type_on_related_model='ForeignKey')]

## Reverse Relations

| Field Name | Field Type | Database Type | Related Model | Field Name on Related Model | Field Type on Related Model |
|----------|----------|-------------|-------------|---------------------------|---------------------------|
| `BannedUserContent_addons+ (no reverse relation allowed)` | ManyToOneRel | integer UNSIGNED | users.BannedUserContent_addons | addon | ForeignKey |
| `_ratings` | ManyToOneRel | integer UNSIGNED | ratings.Rating | addon | ForeignKey |
| `addon_set` | ManyToOneRel | integer UNSIGNED | abuse.CinderJob | target_addon | ForeignKey |
| `addon_set` | ManyToOneRel | integer UNSIGNED | activity.AddonLog | addon | ForeignKey |
| `addon_set` | ManyToOneRel | integer UNSIGNED | addons.AddonCategory | addon | ForeignKey |
| `addon_set` | ManyToOneRel | integer UNSIGNED | addons.AddonUser | addon | ForeignKey |
| `addon_set` | ManyToOneRel | integer UNSIGNED | addons.AddonUserPendingConfirmation | addon | ForeignKey |
| `addon_set` | OneToOneRel | integer UNSIGNED | addons.AddonApprovalsCounter | addon | OneToOneField |
| `addon_set` | ManyToOneRel | integer UNSIGNED | addons.FrozenAddon | addon | ForeignKey |
| `addon_set` | OneToOneRel | integer UNSIGNED | addons.AddonGUID | addon | OneToOneField |
| `addon_set` | ManyToOneRel | integer UNSIGNED | addons.AddonBrowserMapping | addon | ForeignKey |
| `addon_set` | ManyToOneRel | integer UNSIGNED | bandwagon.CollectionAddon | addon | ForeignKey |
| `addon_set` | ManyToOneRel | integer UNSIGNED | devhub.RssKey | addon | ForeignKey |
| `addon_set` | OneToOneRel | integer UNSIGNED | discovery.DiscoveryItem | addon | OneToOneField |
| `addon_set` | ManyToOneRel | integer UNSIGNED | files.FileUpload | addon | ForeignKey |
| `addon_set` | OneToOneRel | integer UNSIGNED | hero.PrimaryHero | addon | OneToOneField |
| `addon_set` | OneToOneRel | integer UNSIGNED | ratings.RatingAggregate | addon | OneToOneField |
| `addon_set` | ManyToOneRel | integer UNSIGNED | reviewers.ReviewerSubscription | addon | ForeignKey |
| `addon_set` | OneToOneRel | integer UNSIGNED | reviewers.Whiteboard | addon | OneToOneField |
| `addon_set` | ManyToManyRel | through users.BannedUserContent_addons | users.BannedUserContent | addons | ManyToManyField |
| `addon_tags` | ManyToOneRel | integer UNSIGNED | tags.AddonTag | addon | ForeignKey |
| `collections` | ManyToManyRel | through bandwagon.CollectionAddon | bandwagon.Collection | addons | ManyToManyField |
| `content_deleted_on_force_disable` | OneToOneRel | integer UNSIGNED | addons.DisabledAddonContent | addon | OneToOneField |
| `decisions_on` | ManyToOneRel | integer UNSIGNED | abuse.ContentDecision | addon | ForeignKey |
| `migrated_from_lwt` | ManyToOneRel | integer UNSIGNED | addons.MigratedLWT | static_theme | ForeignKey |
| `previews` | ManyToOneRel | integer UNSIGNED | addons.Preview | addon | ForeignKey |
| `promotedaddon` | ManyToOneRel | integer UNSIGNED | promoted.PromotedAddon | addon | ForeignKey |
| `regional_restrictions` | OneToOneRel | integer UNSIGNED | addons.AddonRegionalRestrictions | addon | OneToOneField |
| `reviewerflags` | OneToOneRel | integer UNSIGNED | addons.AddonReviewerFlags | addon | OneToOneField |
| `tags` | ManyToManyRel | through tags.AddonTag | tags.Tag | addons | ManyToManyField |
| `versions` | ManyToOneRel | integer UNSIGNED | versions.Version | addon | ForeignKey |

## Methods

### Other Methods

| Method Name | Signature |
|-----------|---------|
| `all_applications_for` | `(self, promoted_group=None)` |
| `allow_resubmission` | `(self)` |
| `approve_for_version` | `(self, version=None, promoted_groups=None)` |
| `approved_applications_for` | `(self, promoted_group=None)` |
| `approved_promotions` | `(self, promoted_group=None)` |
| `attach_all_authors` | `(addons, addon_dict=None)` |
| `attach_listed_authors` | `(addons, addon_dict=None)` |
| `attach_previews` | `(addons, addon_dict=None, no_transforms=False)` |
| `attach_related_versions` | `(addons, addon_dict=None)` |
| `attach_static_categories` | `(addons, addon_dict=None)` |
| `can_be_deleted` | `(self)` |
| `can_request_review` | `(self)` |
| `clean_slug` | `(self, slug_field='slug')` |
| `deny_resubmission` | `(self)` |
| `disable_all_files` | `(addons, reason)` |
| `find_latest_public_listed_version` | `(self)` |
| `find_latest_version` | `(self, channel, exclude=(5,), deleted=False)` |
| `force_disable` | `(self, skip_activity_log=False)` |
| `force_enable` | `(self, skip_activity_log=False)` |
| `from_upload` | `(upload, *, selected_apps, parsed_data, client_info=None, channel=2)` |
| `get_admin_absolute_url` | `(self)` |
| `get_admin_url_path` | `(self)` |
| `get_default_icon_url` | `(self, size)` |
| `get_detail_url` | `(self, action='detail', args=None)` |
| `get_dev_url` | `(self, action='edit', args=None, prefix_only=False)` |
| `get_fallback` | `()` |
| `get_icon_dir` | `(self)` |
| `get_icon_path` | `(self, size)` |
| `get_icon_url` | `(self, size)` |
| `get_lookup_field` | `(identifier)` |
| `get_next_by_created` | `(self, *, field=<django.db.models.fields.DateTimeField: created>, is_next=True, **kwargs)` |
| `get_next_by_modified` | `(self, *, field=<django.db.models.fields.DateTimeField: modified>, is_next=True, **kwargs)` |
| `get_previous_by_created` | `(self, *, field=<django.db.models.fields.DateTimeField: created>, is_next=False, **kwargs)` |
| `get_previous_by_modified` | `(self, *, field=<django.db.models.fields.DateTimeField: modified>, is_next=False, **kwargs)` |
| `get_reputation_display` | `(self, *, field=<django.db.models.fields.SmallIntegerField: reputation>)` |
| `get_required_metadata` | `(self, has_listed_versions=None)` |
| `get_status_display` | `(self, *, field=<django.db.models.fields.PositiveIntegerField: status>)` |
| `get_type_display` | `(self, *, field=<django.db.models.fields.PositiveIntegerField: type>)` |
| `get_unfiltered_manager` | `()` |
| `get_url_path` | `(self, add_prefix=True)` |
| `has_author` | `(self, user)` |
| `has_complete_metadata` | `(self, has_listed_versions=None)` |
| `has_listed_versions` | `(self, include_deleted=False)` |
| `has_unlisted_versions` | `(self, include_deleted=False)` |
| `increment_theme_version_number` | `(self)` |
| `initialize_addon_from_upload` | `(*, data, upload, channel, user)` |
| `is_public` | `(self)` |
| `is_soft_deleteable` | `(self)` |
| `is_unreviewed` | `(self)` |
| `language_ascii` | `(self)` |
| `on_change` | `(callback)` |
| `promoted_groups` | `(self, *, currently_approved=True)` |
| `reload` | `(self)` |
| `remove_locale` | `(self, locale)` |
| `resolve_webext_translations` | `(data, upload, use_default_locale_fallback=True)` |
| `rollbackable_versions_qs` | `(self, channel)` |
| `serializable_reference` | `(self)` |
| `set_auto_approval_delay_if_higher_than_existing` | `(self, delay, unlisted_only=False)` |
| `set_categories` | `(self, categories)` |
| `set_needs_human_review_on_latest_versions` | `(self, *, reason, due_date=None, ignore_reviewed=True, unique_reason=False, skip_activity_log=False)` |
| `set_tag_list` | `(self, new_tag_list)` |
| `should_redirect_to_submit_flow` | `(self)` |
| `transformer` | `(addons)` |
| `type_can_set_compatibility` | `(addon_type)` |
| `update` | `(self, **kwargs)` |
| `update_all_due_dates` | `(self)` |
| `update_status` | `(self, ignore_version=None)` |
| `update_version` | `(self, ignore=None, _signal=True)` |
| `versions_triggering_needs_human_review_inheritance` | `(self, channel)` |


### Private Methods

| Method Name | Signature |
|-----------|---------|
| `_attach_authors` | `(addons, addon_dict=None, manager='objects', listed=True, to_attr='listed_authors')` |
| `_get_field_value_map` | `(self, meta, exclude=None)` |
| `_is_recommended_theme` | `(self)` |
| `_last_updated_queries` | `()` |
| `_prepare_deletion_email` | `(self, msg, reason)` |
| `_reset_initial_attrs` | `(self, attrs=None)` |
| `_send_changes` | `(self, old_attr, new_attr_kw)` |
| `_set_needs_human_review_on_latest_signed_version` | `(self, *, channel, reason, due_date=None, ignore_reviewed=True, unique_reason=False, skip_activity_log=False)` |


## Custom Managers

### default

**Class:** `AddonManager`

*Base for all managers in AMO.

Returns BaseQuerySets.

If a model has translated fields, they'll be attached through a transform
function.*

#### Custom Methods

##### `get_base_extensions_queue_with_non_disabled_versions(self, *q_filters, admin_reviewer=False)`

*Return base queryset for all queues that look at extensions with non
disabled versions - typically scanners queues, where anything could be
flagged, approved or waiting for review.*

##### `get_base_queryset_for_queue(self, admin_reviewer=False, content_review=False, theme_review=False, select_related_fields_for_listed=True)`


##### `get_content_review_queue(self, admin_reviewer=False)`

*Return a queryset of Addon objects that need content review.*

##### `get_mad_queue(self, admin_reviewer=False)`

*Return a queryset of Addon objects that contain unlisted versions or
had their current listed version flagged by MAD.*

##### `get_pending_rejection_queue(self, admin_reviewer=False)`


##### `get_queryset_for_pending_queues(self, *, admin_reviewer=False, theme_review=False, show_temporarily_delayed=True, show_only_upcoming=False, due_date_reasons_choices=None)`


##### `id_or_slug(self, val)`

*Get add-ons by id or slug.*

##### `not_disabled_by_mozilla(self)`

*Get all add-ons not disabled by Mozilla.*

##### `public(self)`

*Get public add-ons only*

##### `transform(self, fn)`


##### `valid(self)`

*Get valid, enabled add-ons only*

#### Custom QuerySet

**Class:** `AddonQuerySet`

*Represent a lazy database lookup for a set of objects.*

##### Custom Methods

###### `id_or_slug(self, val)`

*Get add-ons by id or slug.*

###### `no_transforms(self)`

###### `not_disabled_by_mozilla(self)`

*Get all add-ons not disabled by Mozilla.*

###### `only_translations(self)`

*Remove all transforms except translations.*

###### `optimized_count(self)`

*Slightly optimized count() for cases where there is a DISTINCT in the
queryset.

When a count() call is made on a queryset that has a distinct, that
causes django to run the full SELECT (including all fields, distinct,
ordering etc) in a subquery and then COUNT() on the result of that
subquery, which is costly/innefficient. That's tracked in
https://code.djangoproject.com/ticket/30685.
We can't easily fix the fact that there is a subquery, but we can
avoid selecting all fields and ordering in that subquery needlessly.*

###### `pop_transforms(self)`

###### `public(self)`

*Get approved add-ons only*

###### `transform(self, fn)`

###### `valid(self)`

*Get valid, enabled add-ons only*

###### `valid_q(self, statuses)`

*Return a Q object that selects a valid Addon with the given statuses.

An add-on is valid if not disabled and has a current version.*

### objects

**Class:** `AddonManager`

*Base for all managers in AMO.

Returns BaseQuerySets.

If a model has translated fields, they'll be attached through a transform
function.*

#### Custom Methods

##### `get_base_extensions_queue_with_non_disabled_versions(self, *q_filters, admin_reviewer=False)`

*Return base queryset for all queues that look at extensions with non
disabled versions - typically scanners queues, where anything could be
flagged, approved or waiting for review.*

##### `get_base_queryset_for_queue(self, admin_reviewer=False, content_review=False, theme_review=False, select_related_fields_for_listed=True)`


##### `get_content_review_queue(self, admin_reviewer=False)`

*Return a queryset of Addon objects that need content review.*

##### `get_mad_queue(self, admin_reviewer=False)`

*Return a queryset of Addon objects that contain unlisted versions or
had their current listed version flagged by MAD.*

##### `get_pending_rejection_queue(self, admin_reviewer=False)`


##### `get_queryset_for_pending_queues(self, *, admin_reviewer=False, theme_review=False, show_temporarily_delayed=True, show_only_upcoming=False, due_date_reasons_choices=None)`


##### `id_or_slug(self, val)`

*Get add-ons by id or slug.*

##### `not_disabled_by_mozilla(self)`

*Get all add-ons not disabled by Mozilla.*

##### `public(self)`

*Get public add-ons only*

##### `transform(self, fn)`


##### `valid(self)`

*Get valid, enabled add-ons only*

#### Custom QuerySet

**Class:** `AddonQuerySet`

*Represent a lazy database lookup for a set of objects.*

##### Custom Methods

###### `id_or_slug(self, val)`

*Get add-ons by id or slug.*

###### `no_transforms(self)`

###### `not_disabled_by_mozilla(self)`

*Get all add-ons not disabled by Mozilla.*

###### `only_translations(self)`

*Remove all transforms except translations.*

###### `optimized_count(self)`

*Slightly optimized count() for cases where there is a DISTINCT in the
queryset.

When a count() call is made on a queryset that has a distinct, that
causes django to run the full SELECT (including all fields, distinct,
ordering etc) in a subquery and then COUNT() on the result of that
subquery, which is costly/innefficient. That's tracked in
https://code.djangoproject.com/ticket/30685.
We can't easily fix the fact that there is a subquery, but we can
avoid selecting all fields and ordering in that subquery needlessly.*

###### `pop_transforms(self)`

###### `public(self)`

*Get approved add-ons only*

###### `transform(self, fn)`

###### `valid(self)`

*Get valid, enabled add-ons only*

###### `valid_q(self, statuses)`

*Return a Q object that selects a valid Addon with the given statuses.

An add-on is valid if not disabled and has a current version.*

### unfiltered

**Class:** `AddonManager`

*Base for all managers in AMO.

Returns BaseQuerySets.

If a model has translated fields, they'll be attached through a transform
function.*

#### Custom Methods

##### `get_base_extensions_queue_with_non_disabled_versions(self, *q_filters, admin_reviewer=False)`

*Return base queryset for all queues that look at extensions with non
disabled versions - typically scanners queues, where anything could be
flagged, approved or waiting for review.*

##### `get_base_queryset_for_queue(self, admin_reviewer=False, content_review=False, theme_review=False, select_related_fields_for_listed=True)`


##### `get_content_review_queue(self, admin_reviewer=False)`

*Return a queryset of Addon objects that need content review.*

##### `get_mad_queue(self, admin_reviewer=False)`

*Return a queryset of Addon objects that contain unlisted versions or
had their current listed version flagged by MAD.*

##### `get_pending_rejection_queue(self, admin_reviewer=False)`


##### `get_queryset_for_pending_queues(self, *, admin_reviewer=False, theme_review=False, show_temporarily_delayed=True, show_only_upcoming=False, due_date_reasons_choices=None)`


##### `id_or_slug(self, val)`

*Get add-ons by id or slug.*

##### `not_disabled_by_mozilla(self)`

*Get all add-ons not disabled by Mozilla.*

##### `public(self)`

*Get public add-ons only*

##### `transform(self, fn)`


##### `valid(self)`

*Get valid, enabled add-ons only*

#### Custom QuerySet

**Class:** `AddonQuerySet`

*Represent a lazy database lookup for a set of objects.*

##### Custom Methods

###### `id_or_slug(self, val)`

*Get add-ons by id or slug.*

###### `no_transforms(self)`

###### `not_disabled_by_mozilla(self)`

*Get all add-ons not disabled by Mozilla.*

###### `only_translations(self)`

*Remove all transforms except translations.*

###### `optimized_count(self)`

*Slightly optimized count() for cases where there is a DISTINCT in the
queryset.

When a count() call is made on a queryset that has a distinct, that
causes django to run the full SELECT (including all fields, distinct,
ordering etc) in a subquery and then COUNT() on the result of that
subquery, which is costly/innefficient. That's tracked in
https://code.djangoproject.com/ticket/30685.
We can't easily fix the fact that there is a subquery, but we can
avoid selecting all fields and ordering in that subquery needlessly.*

###### `pop_transforms(self)`

###### `public(self)`

*Get approved add-ons only*

###### `transform(self, fn)`

###### `valid(self)`

*Get valid, enabled add-ons only*

###### `valid_q(self, statuses)`

*Return a Q object that selects a valid Addon with the given statuses.

An add-on is valid if not disabled and has a current version.*


---

!!! THIS DOCUMENT WAS *AUTOGENERATED* ON 2025-08-02 !!!