Add the "to=" keyword argument to all ForeignKey, ManayToMany and OneToOne Fields.
Signed-off-by: Michael Price <loneviking72@gmail.com>
This commit is contained in:
committed by
Roberto Rosario
parent
038cd30960
commit
53239385ae
@@ -30,8 +30,8 @@ class AccessControlList(models.Model):
|
||||
in the Setup menu.
|
||||
"""
|
||||
content_type = models.ForeignKey(
|
||||
ContentType, on_delete=models.CASCADE,
|
||||
related_name='object_content_type'
|
||||
on_delete=models.CASCADE, related_name='object_content_type',
|
||||
to=ContentType
|
||||
)
|
||||
object_id = models.PositiveIntegerField()
|
||||
content_object = GenericForeignKey(
|
||||
@@ -39,11 +39,11 @@ class AccessControlList(models.Model):
|
||||
)
|
||||
# TODO: limit choices to the permissions valid for the content_object
|
||||
permissions = models.ManyToManyField(
|
||||
StoredPermission, blank=True, related_name='acls',
|
||||
blank=True, related_name='acls', to=StoredPermission,
|
||||
verbose_name=_('Permissions')
|
||||
)
|
||||
role = models.ForeignKey(
|
||||
Role, on_delete=models.CASCADE, related_name='acls',
|
||||
on_delete=models.CASCADE, related_name='acls', to=Role,
|
||||
verbose_name=_('Role')
|
||||
)
|
||||
|
||||
|
||||
@@ -20,12 +20,12 @@ from .search import cabinet_search # NOQA
|
||||
@python_2_unicode_compatible
|
||||
class Cabinet(MPTTModel):
|
||||
parent = TreeForeignKey(
|
||||
'self', blank=True, db_index=True, null=True,
|
||||
on_delete=models.CASCADE, related_name='children'
|
||||
blank=True, db_index=True, null=True, on_delete=models.CASCADE,
|
||||
related_name='children', to='self'
|
||||
)
|
||||
label = models.CharField(max_length=128, verbose_name=_('Label'))
|
||||
documents = models.ManyToManyField(
|
||||
Document, blank=True, related_name='cabinets',
|
||||
blank=True, related_name='cabinets', to=Document,
|
||||
verbose_name=_('Documents')
|
||||
)
|
||||
|
||||
|
||||
@@ -25,7 +25,7 @@ class DocumentCheckout(models.Model):
|
||||
Model to store the state and information of a document checkout
|
||||
"""
|
||||
document = models.OneToOneField(
|
||||
Document, on_delete=models.CASCADE, verbose_name=_('Document')
|
||||
on_delete=models.CASCADE, to=Document, verbose_name=_('Document')
|
||||
)
|
||||
checkout_datetime = models.DateTimeField(
|
||||
auto_now_add=True, verbose_name=_('Check out date and time')
|
||||
@@ -37,7 +37,7 @@ class DocumentCheckout(models.Model):
|
||||
verbose_name=_('Check out expiration date and time')
|
||||
)
|
||||
user = models.ForeignKey(
|
||||
settings.AUTH_USER_MODEL, on_delete=models.CASCADE,
|
||||
on_delete=models.CASCADE, to=settings.AUTH_USER_MODEL,
|
||||
verbose_name=_('User')
|
||||
)
|
||||
block_new_version = models.BooleanField(
|
||||
@@ -96,7 +96,7 @@ class DocumentCheckout(models.Model):
|
||||
|
||||
class NewVersionBlock(models.Model):
|
||||
document = models.ForeignKey(
|
||||
Document, on_delete=models.CASCADE, verbose_name=_('Document')
|
||||
on_delete=models.CASCADE, to=Document, verbose_name=_('Document')
|
||||
)
|
||||
|
||||
objects = NewVersionBlockManager()
|
||||
|
||||
@@ -24,8 +24,8 @@ class ErrorLogEntry(models.Model):
|
||||
max_length=128, verbose_name=_('Namespace')
|
||||
)
|
||||
content_type = models.ForeignKey(
|
||||
ContentType, blank=True, on_delete=models.CASCADE, null=True,
|
||||
related_name='error_log_content_type'
|
||||
blank=True, on_delete=models.CASCADE, null=True,
|
||||
related_name='error_log_content_type', to=ContentType,
|
||||
)
|
||||
object_id = models.PositiveIntegerField(blank=True, null=True)
|
||||
content_object = GenericForeignKey(
|
||||
@@ -77,8 +77,8 @@ class SharedUploadedFile(models.Model):
|
||||
@python_2_unicode_compatible
|
||||
class UserLocaleProfile(models.Model):
|
||||
user = models.OneToOneField(
|
||||
settings.AUTH_USER_MODEL, on_delete=models.CASCADE,
|
||||
related_name='locale_profile', verbose_name=_('User')
|
||||
on_delete=models.CASCADE, related_name='locale_profile',
|
||||
to=settings.AUTH_USER_MODEL, verbose_name=_('User')
|
||||
)
|
||||
timezone = models.CharField(
|
||||
choices=zip(common_timezones, common_timezones), max_length=48,
|
||||
|
||||
@@ -29,10 +29,9 @@ class Transformation(models.Model):
|
||||
transformation argument. Example: if a page is rotated with the Rotation
|
||||
transformation, this field will show by how many degrees it was rotated.
|
||||
"""
|
||||
content_type = models.ForeignKey(ContentType, on_delete=models.CASCADE)
|
||||
content_type = models.ForeignKey(on_delete=models.CASCADE, to=ContentType)
|
||||
object_id = models.PositiveIntegerField()
|
||||
content_object = GenericForeignKey('content_type', 'object_id')
|
||||
|
||||
order = models.PositiveIntegerField(
|
||||
blank=True, db_index=True, default=0, help_text=_(
|
||||
'Order in which the transformations will be executed. If left '
|
||||
|
||||
@@ -76,6 +76,10 @@ class Key(models.Model):
|
||||
def get_absolute_url(self):
|
||||
return reverse('django_gpg:key_detail', args=(self.pk,))
|
||||
|
||||
@property
|
||||
def key_id(self):
|
||||
return self.fingerprint[-8:]
|
||||
|
||||
def save(self, *args, **kwargs):
|
||||
import_results, key_info = gpg_backend.import_and_list_keys(
|
||||
key_data=self.key_data
|
||||
@@ -119,7 +123,3 @@ class Key(models.Model):
|
||||
raise NeedPassphrase
|
||||
|
||||
return file_sign_results
|
||||
|
||||
@property
|
||||
def key_id(self):
|
||||
return self.fingerprint[-8:]
|
||||
|
||||
@@ -19,12 +19,12 @@ logger = logging.getLogger(__name__)
|
||||
@python_2_unicode_compatible
|
||||
class Comment(models.Model):
|
||||
document = models.ForeignKey(
|
||||
Document, db_index=True, on_delete=models.CASCADE,
|
||||
related_name='comments', verbose_name=_('Document')
|
||||
db_index=True, on_delete=models.CASCADE, related_name='comments',
|
||||
to=Document, verbose_name=_('Document')
|
||||
)
|
||||
user = models.ForeignKey(
|
||||
settings.AUTH_USER_MODEL, editable=False, on_delete=models.CASCADE,
|
||||
related_name='comments', verbose_name=_('User'),
|
||||
editable=False, on_delete=models.CASCADE, related_name='comments',
|
||||
to=settings.AUTH_USER_MODEL, verbose_name=_('User'),
|
||||
)
|
||||
# Translators: Comment here is a noun and refers to the actual text stored
|
||||
comment = models.TextField(verbose_name=_('Comment'))
|
||||
|
||||
@@ -46,7 +46,7 @@ class Index(models.Model):
|
||||
verbose_name=_('Enabled')
|
||||
)
|
||||
document_types = models.ManyToManyField(
|
||||
DocumentType, verbose_name=_('Document types')
|
||||
to=DocumentType, verbose_name=_('Document types')
|
||||
)
|
||||
|
||||
objects = IndexManager()
|
||||
@@ -146,10 +146,10 @@ class IndexTemplateNode(MPTTModel):
|
||||
documents but not both.
|
||||
"""
|
||||
parent = TreeForeignKey(
|
||||
'self', blank=True, null=True, on_delete=models.CASCADE
|
||||
blank=True, null=True, on_delete=models.CASCADE, to='self',
|
||||
)
|
||||
index = models.ForeignKey(
|
||||
Index, on_delete=models.CASCADE, related_name='node_templates',
|
||||
on_delete=models.CASCADE, related_name='node_templates', to=Index,
|
||||
verbose_name=_('Index')
|
||||
)
|
||||
expression = models.TextField(
|
||||
@@ -276,18 +276,17 @@ class IndexTemplateNode(MPTTModel):
|
||||
@python_2_unicode_compatible
|
||||
class IndexInstanceNode(MPTTModel):
|
||||
parent = TreeForeignKey(
|
||||
'self', blank=True, null=True, on_delete=models.CASCADE
|
||||
blank=True, null=True, on_delete=models.CASCADE, to='self',
|
||||
)
|
||||
index_template_node = models.ForeignKey(
|
||||
IndexTemplateNode, on_delete=models.CASCADE,
|
||||
related_name='index_instance_nodes',
|
||||
verbose_name=_('Index template node')
|
||||
on_delete=models.CASCADE, related_name='index_instance_nodes',
|
||||
to=IndexTemplateNode, verbose_name=_('Index template node')
|
||||
)
|
||||
value = models.CharField(
|
||||
blank=True, db_index=True, max_length=128, verbose_name=_('Value')
|
||||
)
|
||||
documents = models.ManyToManyField(
|
||||
Document, related_name='index_instance_nodes',
|
||||
related_name='index_instance_nodes', to=Document,
|
||||
verbose_name=_('Documents')
|
||||
)
|
||||
|
||||
|
||||
@@ -12,7 +12,7 @@ from .managers import DocumentPageContentManager
|
||||
@python_2_unicode_compatible
|
||||
class DocumentPageContent(models.Model):
|
||||
document_page = models.OneToOneField(
|
||||
DocumentPage, on_delete=models.CASCADE, related_name='content',
|
||||
on_delete=models.CASCADE, related_name='content', to=DocumentPage,
|
||||
verbose_name=_('Document page')
|
||||
)
|
||||
content = models.TextField(blank=True, verbose_name=_('Content'))
|
||||
@@ -30,8 +30,8 @@ class DocumentPageContent(models.Model):
|
||||
@python_2_unicode_compatible
|
||||
class DocumentVersionParseError(models.Model):
|
||||
document_version = models.ForeignKey(
|
||||
DocumentVersion, on_delete=models.CASCADE,
|
||||
related_name='parsing_errors', verbose_name=_('Document version')
|
||||
on_delete=models.CASCADE, related_name='parsing_errors',
|
||||
to=DocumentVersion, verbose_name=_('Document version')
|
||||
)
|
||||
datetime_submitted = models.DateTimeField(
|
||||
auto_now_add=True, db_index=True, verbose_name=_('Date time submitted')
|
||||
|
||||
@@ -36,8 +36,8 @@ class SignatureBaseModel(models.Model):
|
||||
even when using the same key.
|
||||
"""
|
||||
document_version = models.ForeignKey(
|
||||
DocumentVersion, editable=False, on_delete=models.CASCADE,
|
||||
related_name='signatures', verbose_name=_('Document version')
|
||||
editable=False, on_delete=models.CASCADE, related_name='signatures',
|
||||
to=DocumentVersion, verbose_name=_('Document version')
|
||||
)
|
||||
# Basic fields
|
||||
date = models.DateField(
|
||||
|
||||
@@ -47,8 +47,9 @@ class Workflow(models.Model):
|
||||
max_length=255, unique=True, verbose_name=_('Label')
|
||||
)
|
||||
document_types = models.ManyToManyField(
|
||||
DocumentType, related_name='workflows',
|
||||
verbose_name=_('Document types')
|
||||
related_name='workflows', to=DocumentType, verbose_name=_(
|
||||
'Document types'
|
||||
)
|
||||
)
|
||||
|
||||
objects = WorkflowManager()
|
||||
@@ -141,7 +142,7 @@ class WorkflowState(models.Model):
|
||||
the Completion Amount will show 66%.
|
||||
"""
|
||||
workflow = models.ForeignKey(
|
||||
Workflow, on_delete=models.CASCADE, related_name='states',
|
||||
on_delete=models.CASCADE, related_name='states', to=Workflow,
|
||||
verbose_name=_('Workflow')
|
||||
)
|
||||
label = models.CharField(max_length=255, verbose_name=_('Label'))
|
||||
@@ -210,8 +211,8 @@ class WorkflowState(models.Model):
|
||||
@python_2_unicode_compatible
|
||||
class WorkflowStateAction(models.Model):
|
||||
state = models.ForeignKey(
|
||||
WorkflowState, on_delete=models.CASCADE,
|
||||
related_name='actions', verbose_name=_('Workflow state')
|
||||
on_delete=models.CASCADE, related_name='actions', to=WorkflowState,
|
||||
verbose_name=_('Workflow state')
|
||||
)
|
||||
label = models.CharField(max_length=255, verbose_name=_('Label'))
|
||||
enabled = models.BooleanField(default=True, verbose_name=_('Enabled'))
|
||||
@@ -272,18 +273,17 @@ class WorkflowStateAction(models.Model):
|
||||
@python_2_unicode_compatible
|
||||
class WorkflowTransition(models.Model):
|
||||
workflow = models.ForeignKey(
|
||||
Workflow, on_delete=models.CASCADE, related_name='transitions',
|
||||
on_delete=models.CASCADE, related_name='transitions', to=Workflow,
|
||||
verbose_name=_('Workflow')
|
||||
)
|
||||
label = models.CharField(max_length=255, verbose_name=_('Label'))
|
||||
origin_state = models.ForeignKey(
|
||||
WorkflowState, on_delete=models.CASCADE,
|
||||
related_name='origin_transitions', verbose_name=_('Origin state')
|
||||
on_delete=models.CASCADE, related_name='origin_transitions',
|
||||
to=WorkflowState, verbose_name=_('Origin state')
|
||||
)
|
||||
destination_state = models.ForeignKey(
|
||||
WorkflowState, on_delete=models.CASCADE,
|
||||
related_name='destination_transitions',
|
||||
verbose_name=_('Destination state')
|
||||
on_delete=models.CASCADE, related_name='destination_transitions',
|
||||
to=WorkflowState, verbose_name=_('Destination state')
|
||||
)
|
||||
|
||||
class Meta:
|
||||
@@ -301,11 +301,11 @@ class WorkflowTransition(models.Model):
|
||||
@python_2_unicode_compatible
|
||||
class WorkflowTransitionTriggerEvent(models.Model):
|
||||
transition = models.ForeignKey(
|
||||
WorkflowTransition, on_delete=models.CASCADE,
|
||||
related_name='trigger_events', verbose_name=_('Transition')
|
||||
on_delete=models.CASCADE, related_name='trigger_events',
|
||||
to=WorkflowTransition, verbose_name=_('Transition')
|
||||
)
|
||||
event_type = models.ForeignKey(
|
||||
StoredEventType, on_delete=models.CASCADE,
|
||||
on_delete=models.CASCADE, to=StoredEventType,
|
||||
verbose_name=_('Event type')
|
||||
)
|
||||
|
||||
@@ -320,11 +320,11 @@ class WorkflowTransitionTriggerEvent(models.Model):
|
||||
@python_2_unicode_compatible
|
||||
class WorkflowInstance(models.Model):
|
||||
workflow = models.ForeignKey(
|
||||
Workflow, on_delete=models.CASCADE, related_name='instances',
|
||||
on_delete=models.CASCADE, related_name='instances', to=Workflow,
|
||||
verbose_name=_('Workflow')
|
||||
)
|
||||
document = models.ForeignKey(
|
||||
Document, on_delete=models.CASCADE, related_name='workflows',
|
||||
on_delete=models.CASCADE, related_name='workflows', to=Document,
|
||||
verbose_name=_('Document')
|
||||
)
|
||||
|
||||
@@ -425,19 +425,19 @@ class WorkflowInstanceLogEntry(models.Model):
|
||||
the document state to the Actual state.
|
||||
"""
|
||||
workflow_instance = models.ForeignKey(
|
||||
WorkflowInstance, on_delete=models.CASCADE,
|
||||
related_name='log_entries', verbose_name=_('Workflow instance')
|
||||
on_delete=models.CASCADE, related_name='log_entries',
|
||||
to=WorkflowInstance, verbose_name=_('Workflow instance')
|
||||
)
|
||||
datetime = models.DateTimeField(
|
||||
auto_now_add=True, db_index=True, verbose_name=_('Datetime')
|
||||
)
|
||||
transition = models.ForeignKey(
|
||||
WorkflowTransition, on_delete=models.CASCADE,
|
||||
on_delete=models.CASCADE, to=WorkflowTransition,
|
||||
verbose_name=_('Transition')
|
||||
)
|
||||
user = models.ForeignKey(
|
||||
settings.AUTH_USER_MODEL, blank=True, null=True,
|
||||
on_delete=models.CASCADE, verbose_name=_('User')
|
||||
blank=True, null=True, on_delete=models.CASCADE,
|
||||
to=settings.AUTH_USER_MODEL, verbose_name=_('User')
|
||||
)
|
||||
comment = models.TextField(blank=True, verbose_name=_('Comment'))
|
||||
|
||||
|
||||
@@ -156,7 +156,7 @@ class Document(models.Model):
|
||||
"""
|
||||
uuid = models.UUIDField(default=uuid.uuid4, editable=False)
|
||||
document_type = models.ForeignKey(
|
||||
DocumentType, on_delete=models.CASCADE, related_name='documents',
|
||||
on_delete=models.CASCADE, related_name='documents', to=DocumentType,
|
||||
verbose_name=_('Document type')
|
||||
)
|
||||
label = models.CharField(
|
||||
@@ -381,7 +381,7 @@ class DocumentVersion(models.Model):
|
||||
cls._post_save_hooks[order] = func
|
||||
|
||||
document = models.ForeignKey(
|
||||
Document, on_delete=models.CASCADE, related_name='versions',
|
||||
on_delete=models.CASCADE, related_name='versions', to=Document,
|
||||
verbose_name=_('Document')
|
||||
)
|
||||
timestamp = models.DateTimeField(
|
||||
@@ -455,6 +455,37 @@ class DocumentVersion(models.Model):
|
||||
else:
|
||||
return '#'
|
||||
|
||||
def get_intermidiate_file(self):
|
||||
cache_filename = self.cache_filename
|
||||
logger.debug('Intermidiate filename: %s', cache_filename)
|
||||
|
||||
if cache_storage_backend.exists(cache_filename):
|
||||
logger.debug('Intermidiate file "%s" found.', cache_filename)
|
||||
|
||||
return cache_storage_backend.open(cache_filename)
|
||||
else:
|
||||
logger.debug('Intermidiate file "%s" not found.', cache_filename)
|
||||
|
||||
try:
|
||||
converter = converter_class(file_object=self.open())
|
||||
pdf_file_object = converter.to_pdf()
|
||||
|
||||
with cache_storage_backend.open(cache_filename, 'wb+') as file_object:
|
||||
for chunk in pdf_file_object:
|
||||
file_object.write(chunk)
|
||||
|
||||
return cache_storage_backend.open(cache_filename)
|
||||
except InvalidOfficeFormat:
|
||||
return self.open()
|
||||
except Exception as exception:
|
||||
# Cleanup in case of error
|
||||
logger.error(
|
||||
'Error creating intermediate file "%s"; %s.',
|
||||
cache_filename, exception
|
||||
)
|
||||
cache_storage_backend.delete(cache_filename)
|
||||
raise
|
||||
|
||||
def get_rendered_string(self, preserve_extension=False):
|
||||
if preserve_extension:
|
||||
filename, extension = os.path.splitext(self.document.label)
|
||||
@@ -471,6 +502,47 @@ class DocumentVersion(models.Model):
|
||||
context=Context({'instance': self})
|
||||
)
|
||||
|
||||
def invalidate_cache(self):
|
||||
cache_storage_backend.delete(self.cache_filename)
|
||||
for page in self.pages.all():
|
||||
page.invalidate_cache()
|
||||
|
||||
def open(self, raw=False):
|
||||
"""
|
||||
Return a file descriptor to a document version's file irrespective of
|
||||
the storage backend
|
||||
"""
|
||||
if raw:
|
||||
return self.file.storage.open(self.file.name)
|
||||
else:
|
||||
result = self.file.storage.open(self.file.name)
|
||||
for key in sorted(DocumentVersion._pre_open_hooks):
|
||||
result = DocumentVersion._pre_open_hooks[key](
|
||||
file_object=result, document_version=self
|
||||
)
|
||||
|
||||
return result
|
||||
|
||||
@property
|
||||
def page_count(self):
|
||||
"""
|
||||
The number of pages that the document posses.
|
||||
"""
|
||||
return self.pages.count()
|
||||
|
||||
def revert(self, _user=None):
|
||||
"""
|
||||
Delete the subsequent versions after this one
|
||||
"""
|
||||
logger.info(
|
||||
'Reverting to document document: %s to version: %s',
|
||||
self.document, self
|
||||
)
|
||||
|
||||
event_document_version_revert.commit(actor=_user, target=self.document)
|
||||
for version in self.document.versions.filter(timestamp__gt=self.timestamp):
|
||||
version.delete()
|
||||
|
||||
def save(self, *args, **kwargs):
|
||||
"""
|
||||
Overloaded save method that updates the document version's checksum,
|
||||
@@ -527,78 +599,6 @@ class DocumentVersion(models.Model):
|
||||
sender=Document, instance=self.document
|
||||
)
|
||||
|
||||
def get_intermidiate_file(self):
|
||||
cache_filename = self.cache_filename
|
||||
logger.debug('Intermidiate filename: %s', cache_filename)
|
||||
|
||||
if cache_storage_backend.exists(cache_filename):
|
||||
logger.debug('Intermidiate file "%s" found.', cache_filename)
|
||||
|
||||
return cache_storage_backend.open(cache_filename)
|
||||
else:
|
||||
logger.debug('Intermidiate file "%s" not found.', cache_filename)
|
||||
|
||||
try:
|
||||
converter = converter_class(file_object=self.open())
|
||||
pdf_file_object = converter.to_pdf()
|
||||
|
||||
with cache_storage_backend.open(cache_filename, 'wb+') as file_object:
|
||||
for chunk in pdf_file_object:
|
||||
file_object.write(chunk)
|
||||
|
||||
return cache_storage_backend.open(cache_filename)
|
||||
except InvalidOfficeFormat:
|
||||
return self.open()
|
||||
except Exception as exception:
|
||||
# Cleanup in case of error
|
||||
logger.error(
|
||||
'Error creating intermediate file "%s"; %s.',
|
||||
cache_filename, exception
|
||||
)
|
||||
cache_storage_backend.delete(cache_filename)
|
||||
raise
|
||||
|
||||
def invalidate_cache(self):
|
||||
cache_storage_backend.delete(self.cache_filename)
|
||||
for page in self.pages.all():
|
||||
page.invalidate_cache()
|
||||
|
||||
def open(self, raw=False):
|
||||
"""
|
||||
Return a file descriptor to a document version's file irrespective of
|
||||
the storage backend
|
||||
"""
|
||||
if raw:
|
||||
return self.file.storage.open(self.file.name)
|
||||
else:
|
||||
result = self.file.storage.open(self.file.name)
|
||||
for key in sorted(DocumentVersion._pre_open_hooks):
|
||||
result = DocumentVersion._pre_open_hooks[key](
|
||||
file_object=result, document_version=self
|
||||
)
|
||||
|
||||
return result
|
||||
|
||||
@property
|
||||
def page_count(self):
|
||||
"""
|
||||
The number of pages that the document posses.
|
||||
"""
|
||||
return self.pages.count()
|
||||
|
||||
def revert(self, _user=None):
|
||||
"""
|
||||
Delete the subsequent versions after this one
|
||||
"""
|
||||
logger.info(
|
||||
'Reverting to document document: %s to version: %s',
|
||||
self.document, self
|
||||
)
|
||||
|
||||
event_document_version_revert.commit(actor=_user, target=self.document)
|
||||
for version in self.document.versions.filter(timestamp__gt=self.timestamp):
|
||||
version.delete()
|
||||
|
||||
def save_to_file(self, filepath, buffer_size=1024 * 1024):
|
||||
"""
|
||||
Save a copy of the document from the document storage backend
|
||||
@@ -692,7 +692,7 @@ class DocumentTypeFilename(models.Model):
|
||||
quick rename functionality
|
||||
"""
|
||||
document_type = models.ForeignKey(
|
||||
DocumentType, on_delete=models.CASCADE, related_name='filenames',
|
||||
on_delete=models.CASCADE, related_name='filenames', to=DocumentType,
|
||||
verbose_name=_('Document type')
|
||||
)
|
||||
filename = models.CharField(
|
||||
@@ -716,7 +716,7 @@ class DocumentPage(models.Model):
|
||||
Model that describes a document version page
|
||||
"""
|
||||
document_version = models.ForeignKey(
|
||||
DocumentVersion, on_delete=models.CASCADE, related_name='pages',
|
||||
on_delete=models.CASCADE, related_name='pages', to=DocumentVersion,
|
||||
verbose_name=_('Document version')
|
||||
)
|
||||
page_number = models.PositiveIntegerField(
|
||||
@@ -895,8 +895,8 @@ class DocumentPage(models.Model):
|
||||
|
||||
class DocumentPageCachedImage(models.Model):
|
||||
document_page = models.ForeignKey(
|
||||
DocumentPage, on_delete=models.CASCADE, related_name='cached_images',
|
||||
verbose_name=_('Document page')
|
||||
on_delete=models.CASCADE, related_name='cached_images',
|
||||
to=DocumentPage, verbose_name=_('Document page')
|
||||
)
|
||||
filename = models.CharField(max_length=128, verbose_name=_('Filename'))
|
||||
|
||||
@@ -924,11 +924,11 @@ class RecentDocument(models.Model):
|
||||
a given user
|
||||
"""
|
||||
user = models.ForeignKey(
|
||||
settings.AUTH_USER_MODEL, db_index=True, editable=False,
|
||||
on_delete=models.CASCADE, verbose_name=_('User')
|
||||
db_index=True, editable=False, on_delete=models.CASCADE,
|
||||
to=settings.AUTH_USER_MODEL, verbose_name=_('User')
|
||||
)
|
||||
document = models.ForeignKey(
|
||||
Document, editable=False, on_delete=models.CASCADE,
|
||||
editable=False, on_delete=models.CASCADE, to=Document,
|
||||
verbose_name=_('Document')
|
||||
)
|
||||
datetime_accessed = models.DateTimeField(
|
||||
@@ -953,11 +953,11 @@ class RecentDocument(models.Model):
|
||||
@python_2_unicode_compatible
|
||||
class DuplicatedDocument(models.Model):
|
||||
document = models.ForeignKey(
|
||||
Document, on_delete=models.CASCADE, related_name='duplicates',
|
||||
on_delete=models.CASCADE, related_name='duplicates', to=Document,
|
||||
verbose_name=_('Document')
|
||||
)
|
||||
documents = models.ManyToManyField(
|
||||
Document, verbose_name=_('Duplicated documents')
|
||||
to=Document, verbose_name=_('Duplicated documents')
|
||||
)
|
||||
datetime_added = models.DateTimeField(
|
||||
auto_now_add=True, db_index=True, verbose_name=_('Added')
|
||||
|
||||
@@ -43,12 +43,13 @@ class StoredEventType(models.Model):
|
||||
@python_2_unicode_compatible
|
||||
class EventSubscription(models.Model):
|
||||
user = models.ForeignKey(
|
||||
settings.AUTH_USER_MODEL, db_index=True, on_delete=models.CASCADE,
|
||||
related_name='event_subscriptions', verbose_name=_('User')
|
||||
db_index=True, on_delete=models.CASCADE,
|
||||
related_name='event_subscriptions', to=settings.AUTH_USER_MODEL,
|
||||
verbose_name=_('User')
|
||||
)
|
||||
stored_event_type = models.ForeignKey(
|
||||
StoredEventType, on_delete=models.CASCADE,
|
||||
related_name='event_subscriptions', verbose_name=_('Event type')
|
||||
on_delete=models.CASCADE, related_name='event_subscriptions',
|
||||
to=StoredEventType, verbose_name=_('Event type')
|
||||
)
|
||||
|
||||
objects = EventSubscriptionManager()
|
||||
@@ -64,11 +65,12 @@ class EventSubscription(models.Model):
|
||||
@python_2_unicode_compatible
|
||||
class Notification(models.Model):
|
||||
user = models.ForeignKey(
|
||||
settings.AUTH_USER_MODEL, db_index=True, on_delete=models.CASCADE,
|
||||
related_name='notifications', verbose_name=_('User')
|
||||
db_index=True, on_delete=models.CASCADE,
|
||||
related_name='notifications', to=settings.AUTH_USER_MODEL,
|
||||
verbose_name=_('User')
|
||||
)
|
||||
action = models.ForeignKey(
|
||||
Action, on_delete=models.CASCADE, related_name='notifications',
|
||||
on_delete=models.CASCADE, related_name='notifications', to=Action,
|
||||
verbose_name=_('Action')
|
||||
)
|
||||
read = models.BooleanField(default=False, verbose_name=_('Read'))
|
||||
@@ -85,7 +87,7 @@ class Notification(models.Model):
|
||||
@python_2_unicode_compatible
|
||||
class ObjectEventSubscription(models.Model):
|
||||
content_type = models.ForeignKey(
|
||||
ContentType, on_delete=models.CASCADE,
|
||||
on_delete=models.CASCADE, to=ContentType,
|
||||
)
|
||||
object_id = models.PositiveIntegerField()
|
||||
content_object = GenericForeignKey(
|
||||
@@ -93,12 +95,13 @@ class ObjectEventSubscription(models.Model):
|
||||
fk_field='object_id',
|
||||
)
|
||||
user = models.ForeignKey(
|
||||
settings.AUTH_USER_MODEL, db_index=True, on_delete=models.CASCADE,
|
||||
related_name='object_subscriptions', verbose_name=_('User')
|
||||
db_index=True, on_delete=models.CASCADE,
|
||||
related_name='object_subscriptions', to=settings.AUTH_USER_MODEL,
|
||||
verbose_name=_('User')
|
||||
)
|
||||
stored_event_type = models.ForeignKey(
|
||||
StoredEventType, on_delete=models.CASCADE,
|
||||
related_name='object_subscriptions', verbose_name=_('Event type')
|
||||
on_delete=models.CASCADE, related_name='object_subscriptions',
|
||||
to=StoredEventType, verbose_name=_('Event type')
|
||||
)
|
||||
|
||||
objects = ObjectEventSubscriptionManager()
|
||||
|
||||
@@ -29,7 +29,7 @@ class SmartLink(models.Model):
|
||||
)
|
||||
enabled = models.BooleanField(default=True, verbose_name=_('Enabled'))
|
||||
document_types = models.ManyToManyField(
|
||||
DocumentType, verbose_name=_('Document types')
|
||||
to=DocumentType, verbose_name=_('Document types')
|
||||
)
|
||||
|
||||
objects = SmartLinkManager()
|
||||
@@ -105,7 +105,7 @@ class ResolvedSmartLink(SmartLink):
|
||||
@python_2_unicode_compatible
|
||||
class SmartLinkCondition(models.Model):
|
||||
smart_link = models.ForeignKey(
|
||||
SmartLink, on_delete=models.CASCADE, related_name='conditions',
|
||||
on_delete=models.CASCADE, related_name='conditions', to=SmartLink,
|
||||
verbose_name=_('Smart link')
|
||||
)
|
||||
inclusion = models.CharField(
|
||||
|
||||
@@ -111,7 +111,7 @@ class UserMailer(models.Model):
|
||||
|
||||
class UserMailerLogEntry(models.Model):
|
||||
user_mailer = models.ForeignKey(
|
||||
UserMailer, on_delete=models.CASCADE, related_name='error_log',
|
||||
on_delete=models.CASCADE, related_name='error_log', to=UserMailer,
|
||||
verbose_name=_('User mailer')
|
||||
)
|
||||
datetime = models.DateTimeField(
|
||||
|
||||
@@ -149,11 +149,11 @@ class DocumentMetadata(models.Model):
|
||||
current value
|
||||
"""
|
||||
document = models.ForeignKey(
|
||||
Document, on_delete=models.CASCADE, related_name='metadata',
|
||||
on_delete=models.CASCADE, related_name='metadata', to=Document,
|
||||
verbose_name=_('Document')
|
||||
)
|
||||
metadata_type = models.ForeignKey(
|
||||
MetadataType, on_delete=models.CASCADE, verbose_name=_('Type')
|
||||
on_delete=models.CASCADE, to=MetadataType, verbose_name=_('Type')
|
||||
)
|
||||
value = models.CharField(
|
||||
blank=True, db_index=True, max_length=255, null=True,
|
||||
@@ -207,11 +207,11 @@ class DocumentMetadata(models.Model):
|
||||
@python_2_unicode_compatible
|
||||
class DocumentTypeMetadataType(models.Model):
|
||||
document_type = models.ForeignKey(
|
||||
DocumentType, on_delete=models.CASCADE, related_name='metadata',
|
||||
on_delete=models.CASCADE, related_name='metadata', to=DocumentType,
|
||||
verbose_name=_('Document type')
|
||||
)
|
||||
metadata_type = models.ForeignKey(
|
||||
MetadataType, on_delete=models.CASCADE,
|
||||
on_delete=models.CASCADE, to=MetadataType,
|
||||
verbose_name=_('Metadata type')
|
||||
)
|
||||
required = models.BooleanField(default=False, verbose_name=_('Required'))
|
||||
|
||||
@@ -14,8 +14,8 @@ class DocumentTypeSettings(models.Model):
|
||||
Define for OCR for a specific document should behave
|
||||
"""
|
||||
document_type = models.OneToOneField(
|
||||
DocumentType, on_delete=models.CASCADE, related_name='ocr_settings',
|
||||
unique=True, verbose_name=_('Document type')
|
||||
on_delete=models.CASCADE, related_name='ocr_settings',
|
||||
to=DocumentType, unique=True, verbose_name=_('Document type')
|
||||
)
|
||||
auto_ocr = models.BooleanField(
|
||||
default=True,
|
||||
@@ -30,8 +30,8 @@ class DocumentTypeSettings(models.Model):
|
||||
@python_2_unicode_compatible
|
||||
class DocumentPageOCRContent(models.Model):
|
||||
document_page = models.OneToOneField(
|
||||
DocumentPage, on_delete=models.CASCADE, related_name='ocr_content',
|
||||
verbose_name=_('Document page')
|
||||
on_delete=models.CASCADE, related_name='ocr_content',
|
||||
to=DocumentPage, verbose_name=_('Document page')
|
||||
)
|
||||
content = models.TextField(blank=True, verbose_name=_('Content'))
|
||||
|
||||
@@ -48,8 +48,8 @@ class DocumentPageOCRContent(models.Model):
|
||||
@python_2_unicode_compatible
|
||||
class DocumentVersionOCRError(models.Model):
|
||||
document_version = models.ForeignKey(
|
||||
DocumentVersion, on_delete=models.CASCADE, related_name='ocr_errors',
|
||||
verbose_name=_('Document version')
|
||||
on_delete=models.CASCADE, related_name='ocr_errors',
|
||||
to=DocumentVersion, verbose_name=_('Document version')
|
||||
)
|
||||
datetime_submitted = models.DateTimeField(
|
||||
auto_now_add=True, db_index=True, verbose_name=_('Date time submitted')
|
||||
|
||||
@@ -75,10 +75,11 @@ class Role(models.Model):
|
||||
max_length=64, unique=True, verbose_name=_('Label')
|
||||
)
|
||||
permissions = models.ManyToManyField(
|
||||
StoredPermission, related_name='roles', verbose_name=_('Permissions')
|
||||
related_name='roles', to=StoredPermission,
|
||||
verbose_name=_('Permissions')
|
||||
)
|
||||
groups = models.ManyToManyField(
|
||||
Group, related_name='roles', verbose_name=_('Groups')
|
||||
related_name='roles', to=Group, verbose_name=_('Groups')
|
||||
)
|
||||
|
||||
objects = RoleManager()
|
||||
|
||||
@@ -503,18 +503,18 @@ class EmailBaseModel(IntervalBaseModel):
|
||||
), max_length=128, verbose_name=_('Metadata attachment name')
|
||||
)
|
||||
subject_metadata_type = models.ForeignKey(
|
||||
MetadataType, blank=True, help_text=_(
|
||||
blank=True, help_text=_(
|
||||
'Select a metadata type valid for the document type selected in '
|
||||
'which to store the email\'s subject.'
|
||||
), on_delete=models.CASCADE, null=True, related_name='email_subject',
|
||||
verbose_name=_('Subject metadata type')
|
||||
to=MetadataType, verbose_name=_('Subject metadata type')
|
||||
)
|
||||
from_metadata_type = models.ForeignKey(
|
||||
MetadataType, blank=True, help_text=_(
|
||||
blank=True, help_text=_(
|
||||
'Select a metadata type valid for the document type selected in '
|
||||
'which to store the email\'s "from" value.'
|
||||
), on_delete=models.CASCADE, null=True, related_name='email_from',
|
||||
verbose_name=_('From metadata type')
|
||||
to=MetadataType, verbose_name=_('From metadata type')
|
||||
)
|
||||
store_body = models.BooleanField(
|
||||
default=True, help_text=_(
|
||||
@@ -787,7 +787,7 @@ class WatchFolderSource(IntervalBaseModel):
|
||||
|
||||
class SourceLog(models.Model):
|
||||
source = models.ForeignKey(
|
||||
Source, on_delete=models.CASCADE, related_name='logs',
|
||||
on_delete=models.CASCADE, related_name='logs', to=Source,
|
||||
verbose_name=_('Source')
|
||||
)
|
||||
datetime = models.DateTimeField(
|
||||
|
||||
@@ -21,7 +21,7 @@ class Tag(models.Model):
|
||||
)
|
||||
color = RGBColorField(verbose_name=_('Color'))
|
||||
documents = models.ManyToManyField(
|
||||
Document, related_name='tags', verbose_name=_('Documents')
|
||||
related_name='tags', to=Document, verbose_name=_('Documents')
|
||||
)
|
||||
|
||||
class Meta:
|
||||
|
||||
Reference in New Issue
Block a user