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:
Michael Price
2018-03-22 19:36:10 -04:00
committed by Roberto Rosario
parent 038cd30960
commit 53239385ae
20 changed files with 176 additions and 174 deletions

View File

@@ -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')
)

View File

@@ -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')
)

View File

@@ -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()

View File

@@ -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,

View File

@@ -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 '

View File

@@ -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:]

View File

@@ -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'))

View File

@@ -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')
)

View File

@@ -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')

View File

@@ -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(

View File

@@ -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'))

View File

@@ -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')

View File

@@ -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()

View File

@@ -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(

View File

@@ -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(

View File

@@ -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'))

View File

@@ -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')

View File

@@ -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()

View File

@@ -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(

View File

@@ -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: