# promoted.PromotedGroup

## Model Info

| Key | Value |
|---|-----|
| Model Name | PromotedGroup |
| Verbose Name | promoted group |
| Verbose Name Plural | promoted groups |
| Docstring | <p>A promotion group defining the promotion rules for add-ons.<br>NOTE: This model replaces the legacy PromotedClass and its constants</p> |
| Is Abstract | False |
| Is Proxy | False |
| Is Managed | True |
| Ordering | [] |
| Permissions | [] |
| Default Permissions | ('add', 'change', 'delete', 'view') |
| Indexes | [] |
| Constraints | [] |
| Database Table | promoted_promotedgroup |
| Base Manager | None |
| Default Manager | None |
| File | /data/olympia/src/olympia/promoted/models.py |
| Starting Line Number | 49 |
| Method Resolution Order | (<class 'olympia.promoted.models.PromotedGroup'>, <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 |
|----------|----------|---------------|-------------|------------|
| `active` | BooleanField | active | bool | active |
| `admin_review` | BooleanField | admin_review | bool | admin review |
| `api_name` | CharField | api_name | varchar(100) | api name |
| `autograph_signing_states` | JSONField | autograph_signing_states | json | autograph signing states |
| `badged` | BooleanField | badged | bool | badged |
| `can_be_compatible_with_all_fenix_versions` | BooleanField | can_be_compatible_with_all_fenix_versions | bool | can be compatible with all fenix versions |
| `can_primary_hero` | BooleanField | can_primary_hero | bool | can primary hero |
| `flag_for_human_review` | BooleanField | flag_for_human_review | bool | flag for human review |
| `group_id` | SmallIntegerField | group_id | smallint | group id |
| `high_profile` | BooleanField | high_profile | bool | high profile |
| `high_profile_rating` | BooleanField | high_profile_rating | bool | high profile rating |
| `id (pk)` | AutoField | id | integer AUTO_INCREMENT | ID |
| `immediate_approval` | BooleanField | immediate_approval | bool | immediate approval |
| `is_public` | BooleanField | is_public | bool | is public |
| `listed_pre_review` | BooleanField | listed_pre_review | bool | listed pre review |
| `name` | CharField | name | varchar(255) | name |
| `promoted_versions` | ManyToOneRel |  | integer |  |
| `promotedaddon` | ManyToOneRel |  | integer |  |
| `search_ranking_bump` | FloatField | search_ranking_bump | double precision | search ranking bump |
| `unlisted_pre_review` | BooleanField | unlisted_pre_review | bool | unlisted pre review |

fields_reverse_relation=[FieldReverseRelation(name='promotedgroup_set', field_type='ManyToOneRel', field_db_type='integer', related_model='promoted.PromotedAddon', field_name_on_related_model='promoted_group', field_type_on_related_model='ForeignKey'), FieldReverseRelation(name='promoted_versions', field_type='ManyToOneRel', field_db_type='integer', related_model='promoted.PromotedApproval', field_name_on_related_model='promoted_group', 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 |
|----------|----------|-------------|-------------|---------------------------|---------------------------|
| `promoted_versions` | ManyToOneRel | integer | promoted.PromotedApproval | promoted_group | ForeignKey |
| `promotedgroup_set` | ManyToOneRel | integer | promoted.PromotedAddon | promoted_group | ForeignKey |

## Methods

### Other Methods

| Method Name | Signature |
|-----------|---------|
| `active_groups` | `()` |
| `badged_groups` | `()` |
| `get_group_id_display` | `(self, *, field=<django.db.models.fields.SmallIntegerField: group_id>)` |


### Private Methods

| Method Name | Signature |
|-----------|---------|
| `_get_field_value_map` | `(self, meta, exclude=None)` |


## Custom Managers

### default

**Class:** `PromotedGroupManager`

*Base for all managers in AMO.

Returns BaseQuerySets.

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

#### Custom Methods

##### `all_for(self, addon)`


##### `approved_for(self, addon)`


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


#### Custom QuerySet

**Class:** `PromotedGroupQuerySet`

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

##### Custom Methods

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

###### `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)`

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

### objects

**Class:** `PromotedGroupManager`

*Base for all managers in AMO.

Returns BaseQuerySets.

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

#### Custom Methods

##### `all_for(self, addon)`


##### `approved_for(self, addon)`


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


#### Custom QuerySet

**Class:** `PromotedGroupQuerySet`

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

##### Custom Methods

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

###### `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)`

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


---

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