# bandwagon.Collection ## Model Info | Key | Value | |---|-----| | Model Name | Collection | | Verbose Name | collection | | Verbose Name Plural | collections | | Docstring | <p>Collection(created, modified, id, uuid, name, slug, description, default\_locale, listed, addon\_count, author, deleted)</p> | | Is Abstract | False | | Is Proxy | False | | Is Managed | True | | Ordering | [] | | Permissions | [] | | Default Permissions | ('add', 'change', 'delete', 'view') | | Indexes | [<Index: fields=['created'] name='collections_created_idx'>, <Index: fields=['listed'] name='collections_listed_idx'>, <Index: fields=['slug'] name='collections_slug_idx'>] | | Constraints | [<UniqueConstraint: fields=('author', 'slug') name='author_id'>] | | Database Table | collections | | Base Manager | unfiltered | | Default Manager | None | | File | /data/olympia/src/olympia/bandwagon/models.py | | Starting Line Number | 56 | | Method Resolution Order | (<class 'olympia.bandwagon.models.Collection'>, <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_collections+` | ManyToOneRel | | integer UNSIGNED | | | `abuse_reports` | ManyToOneRel | | integer UNSIGNED | | | `addon_count` | PositiveIntegerField | addonCount | integer UNSIGNED | addon count | | `addons` | ManyToManyField | addons | through bandwagon.CollectionAddon | addons | | `author` | ForeignKey | author_id | integer | author | | `bannedusercontent` | ManyToManyRel | | through users.BannedUserContent_collections | | | `collectionaddon` | ManyToOneRel | | integer UNSIGNED | | | `created` | DateTimeField | created | datetime(6) | created | | `decisions_on` | ManyToOneRel | | integer UNSIGNED | | | `default_locale` | CharField | defaultlocale | varchar(10) | default locale | | `deleted` | BooleanField | deleted | bool | deleted | | `description` | NoURLsField | description | integer UNSIGNED | description | | `id (pk)` | PositiveAutoField | id | integer UNSIGNED AUTO_INCREMENT | id | | `listed` | BooleanField | listed | bool | listed | | `modified` | DateTimeField | modified | datetime(6) | modified | | `name` | TranslatedField | name | integer UNSIGNED | name | | `slug` | CharField | slug | varchar(30) | slug | | `uuid` | UUIDField | uuid | char(32) | uuid | ## Relations | Field Name | Field Type | Database Column | Database Type | Related Model | Related Name | |----------|----------|---------------|-------------|-------------|------------| | `addons` | ManyToManyField | addons | through bandwagon.CollectionAddon | addons.Addon | collections | | `author` | ForeignKey | author_id | integer | users.UserProfile | collections | | `description` | NoURLsField | description | integer UNSIGNED | translations.NoURLsTranslation | Collection_description_set+ | | `name` | TranslatedField | name | integer UNSIGNED | translations.Translation | Collection_name_set+ | fields_reverse_relation=[FieldReverseRelation(name='abuse_reports', field_type='ManyToOneRel', field_db_type='integer UNSIGNED', related_model='abuse.AbuseReport', field_name_on_related_model='collection', 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='collection', field_type_on_related_model='ForeignKey'), FieldReverseRelation(name='collection_set', field_type='ManyToOneRel', field_db_type='integer UNSIGNED', related_model='bandwagon.CollectionAddon', field_name_on_related_model='collection', field_type_on_related_model='ForeignKey'), FieldReverseRelation(name='BannedUserContent_collections+ (no reverse relation allowed)', field_type='ManyToOneRel', field_db_type='integer UNSIGNED', related_model='users.BannedUserContent_collections', field_name_on_related_model='collection', field_type_on_related_model='ForeignKey'), FieldReverseRelation(name='collection_set', field_type='ManyToManyRel', field_db_type='through users.BannedUserContent_collections', related_model='users.BannedUserContent', field_name_on_related_model='collections', field_type_on_related_model='ManyToManyField')] ## Reverse Relations | Field Name | Field Type | Database Type | Related Model | Field Name on Related Model | Field Type on Related Model | |----------|----------|-------------|-------------|---------------------------|---------------------------| | `BannedUserContent_collections+ (no reverse relation allowed)` | ManyToOneRel | integer UNSIGNED | users.BannedUserContent_collections | collection | ForeignKey | | `abuse_reports` | ManyToOneRel | integer UNSIGNED | abuse.AbuseReport | collection | ForeignKey | | `collection_set` | ManyToOneRel | integer UNSIGNED | bandwagon.CollectionAddon | collection | ForeignKey | | `collection_set` | ManyToManyRel | through users.BannedUserContent_collections | users.BannedUserContent | collections | ManyToManyField | | `decisions_on` | ManyToOneRel | integer UNSIGNED | abuse.ContentDecision | collection | ForeignKey | ## Methods ### Other Methods | Method Name | Signature | |-----------|---------| | `add_addon` | `(self, addon)` | | `clean_slug` | `(self)` | | `get_admin_absolute_url` | `(self)` | | `get_admin_url_path` | `(self)` | | `get_all_comments` | `(self)` | | `get_fallback` | `()` | | `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_unfiltered_manager` | `()` | | `get_url_path` | `(self)` | | `is_public` | `(self)` | | `owned_by` | `(self, user)` | | `post_save` | `(sender, instance, **kwargs)` | | `reload` | `(self)` | | `remove_addon` | `(self, addon)` | | `serializable_reference` | `(self)` | | `transformer` | `(collections)` | | `undelete` | `(self)` | | `update` | `(self, **kw)` | ### Private Methods | Method Name | Signature | |-----------|---------| | `_get_field_value_map` | `(self, meta, exclude=None)` | ## Custom Managers ### default **Class:** `CollectionManager` *Base for all managers in AMO. Returns BaseQuerySets. If a model has translated fields, they'll be attached through a transform function.* #### Custom Methods ##### `transform(self, fn)` #### Custom QuerySet **Class:** `CollectionQuerySet` *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)` ###### `undelete(self)` ### objects **Class:** `CollectionManager` *Base for all managers in AMO. Returns BaseQuerySets. If a model has translated fields, they'll be attached through a transform function.* #### Custom Methods ##### `transform(self, fn)` #### Custom QuerySet **Class:** `CollectionQuerySet` *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)` ###### `undelete(self)` ### unfiltered **Class:** `CollectionManager` *Base for all managers in AMO. Returns BaseQuerySets. If a model has translated fields, they'll be attached through a transform function.* #### Custom Methods ##### `transform(self, fn)` #### Custom QuerySet **Class:** `CollectionQuerySet` *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)` ###### `undelete(self)` ### unfiltered_for_relations **Class:** `UnfilteredCollectionManagerForRelations` *Like CollectionManager, but defaults to include deleted objects. Designed to be used in reverse relations of Collection that want to include soft-deleted objects.* #### Custom Methods ##### `transform(self, fn)` #### Custom QuerySet **Class:** `CollectionQuerySet` *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)` ###### `undelete(self)` --- !!! THIS DOCUMENT WAS *AUTOGENERATED* ON 2025-08-04 !!!