diff options
author | Magnus Hagander | 2019-10-29 16:01:03 +0000 |
---|---|---|
committer | Magnus Hagander | 2019-10-29 18:52:21 +0000 |
commit | edb7df8bac48f16afbede6a5cecbe01acc77dd0e (patch) | |
tree | 834f708e04c33a199259fad821261c73df70b9c4 /postgresqleu/util/fields.py | |
parent | e176756a5a67a266cc4d2080a34120c2815ef170 (diff) |
Add a widget for inline PDF uploading and storing
Similar to the existing one for JPEG images
Diffstat (limited to 'postgresqleu/util/fields.py')
-rw-r--r-- | postgresqleu/util/fields.py | 24 |
1 files changed, 23 insertions, 1 deletions
diff --git a/postgresqleu/util/fields.py b/postgresqleu/util/fields.py index 579dd970..74f11121 100644 --- a/postgresqleu/util/fields.py +++ b/postgresqleu/util/fields.py @@ -1,9 +1,11 @@ from django.db import models from django.core.exceptions import ValidationError -from .forms import ImageBinaryFormField +from .forms import ImageBinaryFormField, PdfBinaryFormField from PIL import ImageFile +from postgresqleu.util.magic import magicdb + class LowercaseEmailField(models.EmailField): def get_prep_value(self, value): @@ -83,3 +85,23 @@ class ImageBinaryField(models.Field): defaults = {'form_class': ImageBinaryFormField} defaults.update(kwargs) return super(ImageBinaryField, self).formfield(**defaults) + + +class PdfBinaryField(ImageBinaryField): + def get_internal_type(self): + return "PdfBinaryField" + + def formfield(self, **kwargs): + defaults = {'form_class': PdfBinaryFormField} + defaults.update(kwargs) + return super(PdfBinaryField, self).formfield(**defaults) + + def to_python(self, value): + if self.max_length is not None and len(value) > self.max_length: + raise ValidationError("Maximum size of file is {} bytes".format(self.max_length)) + + mtype = magicdb.buffer(value) + if not mtype.startswith('application/pdf'): + raise ValidationError("File must be PDF, not %s" % mtype) + + return value |