# files.FileUpload

## Model Info

| Key | Value |
|---|-----|
| Model Name | FileUpload |
| Verbose Name | file upload |
| Verbose Name Plural | file uploads |
| Docstring | <p>Created when a file is uploaded for validation/submission.</p> |
| Is Abstract | False |
| Is Proxy | False |
| Is Managed | True |
| Ordering | [] |
| Permissions | [] |
| Default Permissions | ('add', 'change', 'delete', 'view') |
| Indexes | [] |
| Constraints | [<UniqueConstraint: fields=('uuid',) name='uuid'>] |
| Database Table | file_uploads |
| Base Manager | objects |
| Default Manager | None |
| File | /data/olympia/src/olympia/files/models.py |
| Starting Line Number | 420 |
| Method Resolution Order | (<class 'olympia.files.models.FileUpload'>, <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 |
|----------|----------|---------------|-------------|------------|
| `access_token` | CharField | access_token | varchar(40) | access token |
| `addon` | ForeignKey | addon_id | integer UNSIGNED | addon |
| `channel` | PositiveSmallIntegerField | channel | smallint UNSIGNED | channel |
| `created` | DateTimeField | created | datetime(6) | created |
| `hash` | CharField | hash | varchar(255) | hash |
| `id (pk)` | AutoField | id | integer AUTO_INCREMENT | ID |
| `ip_address` | CharField | ip_address | varchar(45) | ip address |
| `modified` | DateTimeField | modified | datetime(6) | modified |
| `name` | CharField | name | varchar(255) | name |
| `path` | CharField | path | varchar(255) | path |
| `scannerresults` | ManyToOneRel |  | integer |  |
| `source` | PositiveSmallIntegerField | source | smallint UNSIGNED | source |
| `user` | ForeignKey | user_id | integer | user |
| `uuid` | UUIDField | uuid | char(32) | uuid |
| `valid` | BooleanField | valid | bool | valid |
| `validation` | TextField | validation | longtext | validation |
| `version` | CharField | version | varchar(255) | version |

## Relations

| Field Name | Field Type | Database Column | Database Type | Related Model | Related Name |
|----------|----------|---------------|-------------|-------------|------------|
| `addon` | ForeignKey | addon_id | integer UNSIGNED | addons.Addon | fileupload_set |
| `user` | ForeignKey | user_id | integer | users.UserProfile | fileupload_set |

fields_reverse_relation=[FieldReverseRelation(name='scannerresults', field_type='ManyToOneRel', field_db_type='integer', related_model='scanners.ScannerResult', field_name_on_related_model='upload', 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 |
|----------|----------|-------------|-------------|---------------------------|---------------------------|
| `scannerresults` | ManyToOneRel | integer | scanners.ScannerResult | upload | ForeignKey |

## Methods

### Other Methods

| Method Name | Signature |
|-----------|---------|
| `add_file` | `(self, chunks, filename, size)` |
| `from_post` | `(chunks, *, filename, size, user, source, channel, addon=None, version=None)` |
| `generate_access_token` | `(self)` |
| `generate_path` | `(ext='.zip')` |
| `get_admin_absolute_url` | `(self)` |
| `get_admin_url_path` | `(self)` |
| `get_authenticated_download_url` | `(self)` |
| `get_channel_display` | `(self, *, field=<django.db.models.fields.PositiveSmallIntegerField: channel>)` |
| `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_source_display` | `(self, *, field=<django.db.models.fields.PositiveSmallIntegerField: source>)` |
| `get_unfiltered_manager` | `()` |
| `load_validation` | `(self)` |
| `reload` | `(self)` |
| `serializable_reference` | `(self)` |
| `update` | `(self, **kw)` |
| `write_data_to_path` | `(self, chunks)` |


### Private Methods

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


## Custom Managers

### default

**Class:** `ManagerBase`

*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:** `BaseQuerySet`

*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:** `ManagerBase`

*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:** `BaseQuerySet`

*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-07-29 !!!