When changing document types, don't delete the old metadata that is

also found in the new document type. GitLab issue #421.

Signed-off-by: Roberto Rosario <roberto.rosario.gonzalez@gmail.com>
This commit is contained in:
Roberto Rosario
2017-08-24 19:44:08 -04:00
parent 61d064fb6d
commit 8b9e605e0b
6 changed files with 165 additions and 16 deletions

View File

@@ -12,7 +12,7 @@ from django.utils.translation import ugettext_lazy as _
from documents.models import Document, DocumentType
from .classes import MetadataLookup
from .managers import MetadataTypeManager
from .managers import DocumentTypeMetadataTypeManager, MetadataTypeManager
from .settings import setting_available_parsers, setting_available_validators
@@ -166,6 +166,11 @@ class DocumentMetadata(models.Model):
return force_text(self.metadata_type)
def delete(self, enforce_required=True, *args, **kwargs):
"""
enforce_required prevents deletion of required metadata at the
model level. It used set to False when deleting document metadata
on document type change.
"""
if enforce_required and self.metadata_type.pk in self.document.document_type.metadata.filter(required=True).values_list('metadata_type', flat=True):
raise ValidationError(
_('Metadata type is required for this document type.')
@@ -212,6 +217,8 @@ class DocumentTypeMetadataType(models.Model):
)
required = models.BooleanField(default=False, verbose_name=_('Required'))
objects = DocumentTypeMetadataTypeManager()
def __str__(self):
return force_text(self.metadata_type)