From: yomguy Date: Thu, 12 Apr 2012 19:53:17 +0000 (+0200) Subject: add readers to docs, fix titles, update diag X-Git-Tag: 0.2~55 X-Git-Url: https://git.parisson.com/?a=commitdiff_plain;h=259295f375dce55cd02b279b05a30ca480c0df06;p=teleforma.git add readers to docs, fix titles, update diag --- diff --git a/doc/teleforma-all.dot b/doc/teleforma-all.dot index 46b8625b..60505daa 100644 --- a/doc/teleforma-all.dot +++ b/doc/teleforma-all.dot @@ -367,120 +367,120 @@ digraph name { >] - telemeta_models_media_MediaBaseResource [label=< + telemeta_models_media_MediaRelated [label=< + >MediaRelated
<MediaResource> + + + + + +
MediaBaseResource
<MediaResource>
titletitle CharFieldCharField
dateDateTimeField
description CharFieldTextField
codemime_type CharFieldCharField
referenceurl CharField
public_accesscredits CharField
fileFileField
>] - telemeta_models_media_MediaRelated [label=< + telemeta_models_media_MediaResource [label=< + >MediaResource
<ModelCore> - - + +
MediaRelated
<MediaResource>
titleCharField
+ >] + + telemeta_models_media_MediaBaseResource [label=< + + + - - - -
MediaBaseResource
<MediaResource>
datetitle DateTimeFieldCharField
description TextField
mime_typeCharField
urlcode CharFieldCharField
creditsreference CharField
filepublic_access FileFieldCharField
- >] - - telemeta_models_media_MediaResource [label=< - - - - -
MediaResource
<ModelCore>
>] @@ -1203,13 +1203,6 @@ digraph name { >DateField - init_password - BooleanField - >] @@ -3320,6 +3313,13 @@ digraph name { >CharField + date_added + DateTimeField + expiration_date @@ -3497,6 +3497,323 @@ digraph name { + + + + + django_extensions_db_models_TitleSlugDescriptionModel [label=< + + + + + + + + + + + + + + +
TitleSlugDescriptionModel
titleCharField
slugAutoSlugField
descriptionTextField
+ >] + + django_extensions_db_models_TimeStampedModel [label=< + + + + + + + + + + + +
TimeStampedModel
createdCreationDateTimeField
modifiedModificationDateTimeField
+ >] + + markup_mixin_models_MarkupMixin [label=< + + + + + + + + +
MarkupMixin
markupCharField
+ >] + + notes_models_Topic [label=< + + + + + + + + + + + + + + + + + + + + + + + +
Topic
<TitleSlugDescriptionModel,TimeStampedModel>
idAutoField
createdCreationDateTimeField
modifiedModificationDateTimeField
titleCharField
slugAutoSlugField
descriptionTextField
+ >] + + notes_models_Note [label=< + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Note
<MarkupMixin,TimeStampedModel>
idAutoField
markupCharField
createdCreationDateTimeField
modifiedModificationDateTimeField
dateDateField
contentTextField
rendered_contentTextField
publicBooleanField
object_idPositiveIntegerField
+ >] + + + + + jqchat_models_Room [label=< + + + + + + + + + + + + + + + + + + + + + + + + + + +
Room
idAutoField
nameCharField
createdDateTimeField
descriptionCharField
description_modifiedIntegerField
last_activityIntegerField
object_idPositiveIntegerField
+ >] + + jqchat_models_Message [label=< + + + + + + + + + + + + + + + + + + + + +
Message
idAutoField
eventIntegerField
textTextField
unix_timestampFloatField
createdDateTimeField
+ >] + + + django_contrib_auth_models_Permission -> django_contrib_contenttypes_models_ContentType @@ -3894,13 +4211,13 @@ digraph name { [label="department (course)"] [arrowhead=none, arrowtail=dot]; - teleforma_models_Course -> teleforma_models_Category - [label="category (course)"] [arrowhead=none, arrowtail=dot]; - - teleforma_models_Course -> teleforma_models_CourseType [label="type (course)"] [arrowhead=none, arrowtail=dot]; + + teleforma_models_Course -> jqchat_models_Room + [label="chat_room (course)"] [arrowhead=none, arrowtail=none]; + @@ -3931,6 +4248,10 @@ digraph name { teleforma_models_Conference -> teleforma_models_Room [label="room (conference)"] [arrowhead=none, arrowtail=dot]; + + teleforma_models_Conference -> django_contrib_auth_models_User + [label="readers (conference)"] [arrowhead=dot arrowtail=dot, dir=both]; + @@ -3941,6 +4262,10 @@ digraph name { teleforma_models_Document -> teleforma_models_Conference [label="conference (document)"] [arrowhead=none, arrowtail=dot]; + + teleforma_models_Document -> django_contrib_auth_models_User + [label="readers (document)"] [arrowhead=dot arrowtail=dot, dir=both]; + @@ -3955,11 +4280,19 @@ digraph name { teleforma_models_Media -> telemeta_models_media_MediaItem [label="item (media)"] [arrowhead=none, arrowtail=dot]; + + teleforma_models_Media -> django_contrib_auth_models_User + [label="readers (media)"] [arrowhead=dot arrowtail=dot, dir=both]; + + teleforma_models_Training -> teleforma_models_Category + [label="category (course)"] [arrowhead=none, arrowtail=dot]; + + teleforma_models_Training -> teleforma_models_Course [label="courses (training)"] [arrowhead=dot arrowtail=dot, dir=both]; @@ -4044,4 +4377,45 @@ digraph name { + + + + + + + + + + + + + notes_models_Note -> notes_models_Topic + [label="topic (note)"] [arrowhead=none, arrowtail=dot]; + + + notes_models_Note -> django_contrib_auth_models_User + [label="author (note)"] [arrowhead=none, arrowtail=dot]; + + + notes_models_Note -> django_contrib_contenttypes_models_ContentType + [label="content_type (note)"] [arrowhead=none, arrowtail=dot]; + + + + + + jqchat_models_Room -> django_contrib_contenttypes_models_ContentType + [label="content_type (room)"] [arrowhead=none, arrowtail=dot]; + + + + + jqchat_models_Message -> django_contrib_auth_models_User + [label="user (jchat_messages)"] [arrowhead=none, arrowtail=dot]; + + + jqchat_models_Message -> jqchat_models_Room + [label="room (message)"] [arrowhead=none, arrowtail=dot]; + + } diff --git a/doc/teleforma-all.pdf b/doc/teleforma-all.pdf index c028ffed..93392a3b 100644 Binary files a/doc/teleforma-all.pdf and b/doc/teleforma-all.pdf differ diff --git a/doc/teleforma.dot b/doc/teleforma.dot index 59a0f8a5..87f69d1b 100644 --- a/doc/teleforma.dot +++ b/doc/teleforma.dot @@ -700,6 +700,13 @@ digraph name { >CharField + date_added + DateTimeField + expiration_date @@ -740,13 +747,13 @@ digraph name { [label="department (course)"] [arrowhead=none, arrowtail=dot]; - teleforma_models_Course -> teleforma_models_Category - [label="category (course)"] [arrowhead=none, arrowtail=dot]; - - teleforma_models_Course -> teleforma_models_CourseType [label="type (course)"] [arrowhead=none, arrowtail=dot]; + + teleforma_models_Course -> jqchat_models_Room + [label="chat_room (course)"] [arrowhead=none, arrowtail=none]; + @@ -785,6 +792,18 @@ digraph name { teleforma_models_Conference -> teleforma_models_Room [label="room (conference)"] [arrowhead=none, arrowtail=dot]; + + django_contrib_auth_models_User [label=< + + +
User
+ >] + + teleforma_models_Conference -> django_contrib_auth_models_User + [label="readers (conference)"] [arrowhead=dot arrowtail=dot, dir=both]; + @@ -795,6 +814,18 @@ digraph name { teleforma_models_Document -> teleforma_models_Conference [label="conference (document)"] [arrowhead=none, arrowtail=dot]; + + django_contrib_auth_models_User [label=< + + +
User
+ >] + + teleforma_models_Document -> django_contrib_auth_models_User + [label="readers (document)"] [arrowhead=dot arrowtail=dot, dir=both]; + @@ -817,11 +848,27 @@ digraph name { teleforma_models_Media -> telemeta_models_media_MediaItem [label="item (media)"] [arrowhead=none, arrowtail=dot]; + + django_contrib_auth_models_User [label=< + + +
User
+ >] + + teleforma_models_Media -> django_contrib_auth_models_User + [label="readers (media)"] [arrowhead=dot arrowtail=dot, dir=both]; + + teleforma_models_Training -> teleforma_models_Category + [label="category (course)"] [arrowhead=none, arrowtail=dot]; + + teleforma_models_Training -> teleforma_models_Course [label="courses (training)"] [arrowhead=dot arrowtail=dot, dir=both]; diff --git a/doc/teleforma.pdf b/doc/teleforma.pdf index 368f810e..759641d0 100644 Binary files a/doc/teleforma.pdf and b/doc/teleforma.pdf differ diff --git a/example/diag.sh b/example/diag.sh index 906ee1e6..d5a7b868 100755 --- a/example/diag.sh +++ b/example/diag.sh @@ -4,8 +4,8 @@ app="teleforma" dir="../doc" -python modelviz.py -a > $dir/$app-all.dot -python modelviz.py $app > $dir/$app.dot +./manage.py graph_models -a > $dir/$app-all.dot +./manage.py graph_models $app > $dir/$app.dot dot $dir/$app-all.dot -Tpdf -o $dir/$app-all.pdf dot $dir/$app.dot -Tpdf -o $dir/$app.pdf diff --git a/example/modelviz.py b/example/modelviz.py deleted file mode 100644 index 24af0627..00000000 --- a/example/modelviz.py +++ /dev/null @@ -1,359 +0,0 @@ -#!/usr/bin/env python - -"""Django model to DOT (Graphviz) converter -by Antonio Cavedoni - -Make sure your DJANGO_SETTINGS_MODULE is set to your project or -place this script in the same directory of the project and call -the script like this: - -$ python modelviz.py [-h] [-a] [-d] [-g] [-n] [-L ] [-i ] ... > .dot -$ dot .dot -Tpng -o .png - -options: - -h, --help - show this help message and exit. - - -a, --all_applications - show models from all applications. - - -d, --disable_fields - don't show the class member fields. - - -g, --group_models - draw an enclosing box around models from the same app. - - -i, --include_models=User,Person,Car - only include selected models in graph. - - -n, --verbose_names - use verbose_name for field and models. - - -L, --language - specify language used for verrbose_name localization - - -x, --exclude_columns - exclude specific column(s) from the graph. - - -X, --exclude_models - exclude specific model(s) from the graph. - - -e, --inheritance - show inheritance arrows. -""" -__version__ = "0.9" -__svnid__ = "$Id$" -__license__ = "Python" -__author__ = "Antonio Cavedoni " -__contributors__ = [ - "Stefano J. Attardi ", - "limodou ", - "Carlo C8E Miron", - "Andre Campos ", - "Justin Findlay ", - "Alexander Houben ", - "Bas van Oostveen ", - "Joern Hees " -] - -import os -import sys -import getopt - -from django.core.management import setup_environ - -try: - import settings -except ImportError: - pass -else: - setup_environ(settings) - -from django.utils.translation import activate as activate_language -from django.utils.safestring import mark_safe -from django.template import Template, Context, loader -from django.db import models -from django.db.models import get_models -from django.db.models.fields.related import \ - ForeignKey, OneToOneField, ManyToManyField, RelatedField - -try: - from django.db.models.fields.generic import GenericRelation -except ImportError: - from django.contrib.contenttypes.generic import GenericRelation - -def parse_file_or_list(arg): - if not arg: - return [] - if not ',' in arg and os.path.isfile(arg): - return [e.strip() for e in open(arg).readlines()] - return arg.split(',') - - -def generate_dot(app_labels, **kwargs): - disable_fields = kwargs.get('disable_fields', False) - include_models = parse_file_or_list(kwargs.get('include_models', "")) - all_applications = kwargs.get('all_applications', False) - use_subgraph = kwargs.get('group_models', False) - verbose_names = kwargs.get('verbose_names', False) - inheritance = kwargs.get('inheritance', False) - language = kwargs.get('language', None) - if language is not None: - activate_language(language) - exclude_columns = parse_file_or_list(kwargs.get('exclude_columns', "")) - exclude_models = parse_file_or_list(kwargs.get('exclude_models', "")) - - def skip_field(field): - if exclude_columns: - if verbose_names and field.verbose_name: - if field.verbose_name in exclude_columns: - return True - if field.name in exclude_columns: - return True - return False - - - - - t = loader.get_template('django_extensions/graph_models/head.html') - c = Context({}) - dot = t.render(c) - - apps = [] - if all_applications: - apps = models.get_apps() - - for app_label in app_labels: - app = models.get_app(app_label) - if not app in apps: - apps.append(app) - - graphs = [] - for app in apps: - graph = Context({ - 'name': '"%s"' % app.__name__, - 'app_name': "%s" % '.'.join(app.__name__.split('.')[:-1]), - 'cluster_app_name': "cluster_%s" % app.__name__.replace(".", "_"), - 'disable_fields': disable_fields, - 'use_subgraph': use_subgraph, - 'models': [] - }) - - appmodels = get_models(app) - abstract_models = [] - for appmodel in appmodels: - abstract_models = abstract_models + [abstract_model for abstract_model in appmodel.__bases__ if hasattr(abstract_model, '_meta') and abstract_model._meta.abstract] - abstract_models = list(set(abstract_models)) # remove duplicates - appmodels = abstract_models + appmodels - - - for appmodel in appmodels: - appmodel_abstracts = [abstract_model.__name__ for abstract_model in appmodel.__bases__ if hasattr(abstract_model, '_meta') and abstract_model._meta.abstract] - - # collect all attribs of abstract superclasses - def getBasesAbstractFields(c): - _abstract_fields = [] - for e in c.__bases__: - if hasattr(e, '_meta') and e._meta.abstract: - _abstract_fields.extend(e._meta.fields) - _abstract_fields.extend(getBasesAbstractFields(e)) - return _abstract_fields - abstract_fields = getBasesAbstractFields(appmodel) - - model = { - 'app_name': appmodel.__module__.replace(".", "_"), - 'name': appmodel.__name__, - 'abstracts': appmodel_abstracts, - 'fields': [], - 'relations': [] - } - - # consider given model name ? - def consider(model_name): - if exclude_models and model_name in exclude_models: - return False - return not include_models or model_name in include_models - - if not consider(appmodel._meta.object_name): - continue - - if verbose_names and appmodel._meta.verbose_name: - model['label'] = appmodel._meta.verbose_name - else: - model['label'] = model['name'] - - # model attributes - def add_attributes(field): - if verbose_names and field.verbose_name: - label = field.verbose_name - else: - label = field.name - - t = type(field).__name__ - if isinstance(field, (OneToOneField, ForeignKey)): - t += " ({0})".format(field.rel.field_name) - # TODO: ManyToManyField, GenericRelation - - model['fields'].append({ - 'name': field.name, - 'label': label, - 'type': t, - 'blank': field.blank, - 'abstract': field in abstract_fields, - }) - - # Find all the real attributes. Relations are depicted as graph edges instead of attributes - attributes = [field for field in appmodel._meta.local_fields if not isinstance(field, RelatedField)] - - # find primary key and print it first, ignoring implicit id if other pk exists - pk = appmodel._meta.pk - if not appmodel._meta.abstract and pk in attributes: - add_attributes(pk) - for field in attributes: - if skip_field(field): - continue - if not field.primary_key: - add_attributes(field) - - # FIXME: actually many_to_many fields aren't saved in this model's db table, so why should we add an attribute-line for them in the resulting graph? - #if appmodel._meta.many_to_many: - # for field in appmodel._meta.many_to_many: - # if skip_field(field): - # continue - # add_attributes(field) - - # relations - def add_relation(field, extras=""): - if verbose_names and field.verbose_name: - label = field.verbose_name - else: - label = field.name - - # show related field name - if hasattr(field, 'related_query_name'): - label += ' (%s)' % field.related_query_name() - - _rel = { - 'target_app': field.rel.to.__module__.replace('.', '_'), - 'target': field.rel.to.__name__, - 'type': type(field).__name__, - 'name': field.name, - 'label': label, - 'arrows': extras, - 'needs_node': True - } - if _rel not in model['relations'] and consider(_rel['target']): - model['relations'].append(_rel) - - for field in appmodel._meta.local_fields: - if field.attname.endswith('_ptr_id'): # excluding field redundant with inheritance relation - continue - if field in abstract_fields: # excluding fields inherited from abstract classes. they too show as local_fields - continue - if skip_field(field): - continue - if isinstance(field, OneToOneField): - add_relation(field, '[arrowhead=none, arrowtail=none]') - elif isinstance(field, ForeignKey): - add_relation(field, '[arrowhead=none, arrowtail=dot]') - - for field in appmodel._meta.local_many_to_many: - if skip_field(field): - continue - if isinstance(field, ManyToManyField): - if (getattr(field, 'creates_table', False) or # django 1.1. - (hasattr(field.rel.through, '_meta') and field.rel.through._meta.auto_created)): # django 1.2 - add_relation(field, '[arrowhead=dot arrowtail=dot, dir=both]') - elif isinstance(field, GenericRelation): - add_relation(field, mark_safe('[style="dotted", arrowhead=normal, arrowtail=normal, dir=both]')) - - if inheritance: - # add inheritance arrows - for parent in appmodel.__bases__: - if hasattr(parent, "_meta"): # parent is a model - l = "multi-table" - if parent._meta.abstract: - l = "abstract" - if appmodel._meta.proxy: - l = "proxy" - l += r"\ninheritance" - _rel = { - 'target_app': parent.__module__.replace(".", "_"), - 'target': parent.__name__, - 'type': "inheritance", - 'name': "inheritance", - 'label': l, - 'arrows': '[arrowhead=empty, arrowtail=none]', - 'needs_node': True - } - # TODO: seems as if abstract models aren't part of models.getModels, which is why they are printed by this without any attributes. - if _rel not in model['relations'] and consider(_rel['target']): - model['relations'].append(_rel) - - graph['models'].append(model) - graphs.append(graph) - - nodes = [] - for graph in graphs: - nodes.extend([e['name'] for e in graph['models']]) - - for graph in graphs: - # don't draw duplication nodes because of relations - for model in graph['models']: - for relation in model['relations']: - if relation['target'] in nodes: - relation['needs_node'] = False - # render templates - t = loader.get_template('django_extensions/graph_models/body.html') - dot += '\n' + t.render(graph) - - for graph in graphs: - t = loader.get_template('django_extensions/graph_models/rel.html') - dot += '\n' + t.render(graph) - - - t = loader.get_template('django_extensions/graph_models/tail.html') - c = Context({}) - dot += '\n' + t.render(c) - return dot - -def main(): - try: - opts, args = getopt.getopt(sys.argv[1:], "hadgi:L:x:X:en", - ["help", "all_applications", "disable_fields", "group_models", "include_models=", "inheritance", "verbose_names", "language=", "exclude_columns=", "exclude_models="]) - except getopt.GetoptError, error: - print __doc__ - sys.exit(error) - - kwargs = {} - for opt, arg in opts: - if opt in ("-h", "--help"): - print __doc__ - sys.exit() - if opt in ("-a", "--all_applications"): - kwargs['all_applications'] = True - if opt in ("-d", "--disable_fields"): - kwargs['disable_fields'] = True - if opt in ("-g", "--group_models"): - kwargs['group_models'] = True - if opt in ("-i", "--include_models"): - kwargs['include_models'] = arg - if opt in ("-e", "--inheritance"): - kwargs['inheritance'] = True - if opt in ("-n", "--verbose-names"): - kwargs['verbose_names'] = True - if opt in ("-L", "--language"): - kwargs['language'] = arg - if opt in ("-x", "--exclude_columns"): - kwargs['exclude_columns'] = arg - if opt in ("-X", "--exclude_models"): - kwargs['exclude_models'] = arg - - if not args and not kwargs.get('all_applications', False): - print __doc__ - sys.exit() - - print generate_dot(args, **kwargs) - -if __name__ == "__main__": - main() diff --git a/example/settings.py b/example/settings.py index a1d627d0..07dae802 100644 --- a/example/settings.py +++ b/example/settings.py @@ -95,9 +95,10 @@ SECRET_KEY = 'a8l7%06wr2k+3=%#*#@#rvop2mmzko)44%7k(zx%lls^ihm9^5' # List of callables that know how to import templates from various sources. TEMPLATE_LOADERS = ( - 'django.template.loaders.filesystem.Loader', - 'django.template.loaders.app_directories.Loader', -# 'django.template.loaders.eggs.Loader', + ('django.template.loaders.cached.Loader', ( + 'django.template.loaders.filesystem.Loader', + 'django.template.loaders.app_directories.Loader', + )), ) diff --git a/teleforma/htdocs/css/teleforma.css b/teleforma/htdocs/css/teleforma.css index 02f88829..7a02b25f 100644 --- a/teleforma/htdocs/css/teleforma.css +++ b/teleforma/htdocs/css/teleforma.css @@ -855,6 +855,7 @@ table.listing tbody td, table.listing tbody th { } table.listing tbody td { font-weight: normal; + font-size: 0.9em; } table.listing tbody td.tmp { width: 100%; @@ -1234,6 +1235,9 @@ a.image-link { .icon_delete{ background-image: url('../images/delete.png'); } +.icon_download{ + background-image: url('../images/download.png'); +} .icon_rss,.icon_rss:hover{ background: url('../images/feed-icon-14x14.png') no-repeat; background-position: 0ex .8ex; @@ -1344,10 +1348,10 @@ input,textarea{ #module-set-left .module ul { margin: 0em 0em 0em 0.5em; - font-size: 0.8125em; + font-size: 0.9125em; background-color: #FFF; color: #0000 ; - font-weight: bold; + font-weight: normal; max-height: 250px; overflow-y: scroll; @@ -1422,7 +1426,7 @@ input,textarea{ padding: 0.5em 0.8em 0.8em 0.8em; } -.course_content h3 { +.course_content p { padding: 0.5em 0.8em 0.8em 0.8em; margin-top: 0.8em; } diff --git a/teleforma/migrations/0006_auto.py b/teleforma/migrations/0006_auto.py new file mode 100644 index 00000000..3d2240d9 --- /dev/null +++ b/teleforma/migrations/0006_auto.py @@ -0,0 +1,439 @@ +# -*- coding: utf-8 -*- +import datetime +from south.db import db +from south.v2 import SchemaMigration +from django.db import models + + +class Migration(SchemaMigration): + + def forwards(self, orm): + # Adding M2M table for field readers on 'Document' + db.create_table('teleforma_document_readers', ( + ('id', models.AutoField(verbose_name='ID', primary_key=True, auto_created=True)), + ('document', models.ForeignKey(orm['teleforma.document'], null=False)), + ('user', models.ForeignKey(orm['auth.user'], null=False)) + )) + db.create_unique('teleforma_document_readers', ['document_id', 'user_id']) + + # Adding M2M table for field readers on 'Conference' + db.create_table('teleforma_conference_readers', ( + ('id', models.AutoField(verbose_name='ID', primary_key=True, auto_created=True)), + ('conference', models.ForeignKey(orm['teleforma.conference'], null=False)), + ('user', models.ForeignKey(orm['auth.user'], null=False)) + )) + db.create_unique('teleforma_conference_readers', ['conference_id', 'user_id']) + + # Adding M2M table for field readers on 'Media' + db.create_table('teleforma_media_readers', ( + ('id', models.AutoField(verbose_name='ID', primary_key=True, auto_created=True)), + ('media', models.ForeignKey(orm['teleforma.media'], null=False)), + ('user', models.ForeignKey(orm['auth.user'], null=False)) + )) + db.create_unique('teleforma_media_readers', ['media_id', 'user_id']) + + def backwards(self, orm): + # Removing M2M table for field readers on 'Document' + db.delete_table('teleforma_document_readers') + + # Removing M2M table for field readers on 'Conference' + db.delete_table('teleforma_conference_readers') + + # Removing M2M table for field readers on 'Media' + db.delete_table('teleforma_media_readers') + + models = { + 'auth.group': { + 'Meta': {'object_name': 'Group'}, + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}), + 'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}) + }, + 'auth.permission': { + 'Meta': {'ordering': "('content_type__app_label', 'content_type__model', 'codename')", 'unique_together': "(('content_type', 'codename'),)", 'object_name': 'Permission'}, + 'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}), + 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'}) + }, + 'auth.user': { + 'Meta': {'object_name': 'User'}, + 'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), + 'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}), + 'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}), + 'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Group']", 'symmetrical': 'False', 'blank': 'True'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), + 'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), + 'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}), + 'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}), + 'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}), + 'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'}) + }, + 'contenttypes.contenttype': { + 'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"}, + 'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'}) + }, + 'jqchat.room': { + 'Meta': {'ordering': "['created']", 'object_name': 'Room'}, + 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']", 'null': 'True', 'blank': 'True'}), + 'created': ('django.db.models.fields.DateTimeField', [], {}), + 'description': ('django.db.models.fields.CharField', [], {'max_length': '100', 'null': 'True', 'blank': 'True'}), + 'description_modified': ('django.db.models.fields.IntegerField', [], {'null': 'True'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'last_activity': ('django.db.models.fields.IntegerField', [], {}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '20', 'null': 'True', 'blank': 'True'}), + 'object_id': ('django.db.models.fields.PositiveIntegerField', [], {'null': 'True', 'blank': 'True'}) + }, + 'notes.note': { + 'Meta': {'object_name': 'Note'}, + 'author': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']", 'null': 'True', 'blank': 'True'}), + 'content': ('django.db.models.fields.TextField', [], {}), + 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}), + 'created': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now', 'blank': 'True'}), + 'date': ('django.db.models.fields.DateField', [], {'default': 'datetime.datetime(2012, 4, 12, 0, 0)'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'markup': ('django.db.models.fields.CharField', [], {'default': "'m'", 'max_length': '1'}), + 'modified': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now', 'blank': 'True'}), + 'object_id': ('django.db.models.fields.PositiveIntegerField', [], {}), + 'public': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), + 'rendered_content': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}), + 'topic': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['notes.Topic']"}) + }, + 'notes.topic': { + 'Meta': {'object_name': 'Topic'}, + 'created': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now', 'blank': 'True'}), + 'description': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'modified': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now', 'blank': 'True'}), + 'slug': ('django_extensions.db.fields.AutoSlugField', [], {'allow_duplicates': 'False', 'max_length': '50', 'separator': "u'-'", 'blank': 'True', 'populate_from': "'title'", 'overwrite': 'False'}), + 'title': ('django.db.models.fields.CharField', [], {'max_length': '255'}) + }, + 'teleforma.category': { + 'Meta': {'object_name': 'Category'}, + 'description': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}) + }, + 'teleforma.conference': { + 'Meta': {'ordering': "['-date_begin']", 'object_name': 'Conference'}, + 'comment': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}), + 'course': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'conference'", 'to': "orm['teleforma.Course']"}), + 'date_begin': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}), + 'date_end': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'professor': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'conference'", 'to': "orm['teleforma.Professor']"}), + 'readers': ('django.db.models.fields.related.ManyToManyField', [], {'blank': 'True', 'related_name': "'conference'", 'null': 'True', 'symmetrical': 'False', 'to': "orm['auth.User']"}), + 'room': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'conference'", 'null': 'True', 'to': "orm['teleforma.Room']"}), + 'session': ('django.db.models.fields.CharField', [], {'default': "'1'", 'max_length': '16'}) + }, + 'teleforma.course': { + 'Meta': {'ordering': "['title']", 'object_name': 'Course'}, + 'chat_room': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['jqchat.Room']", 'unique': 'True', 'null': 'True', 'blank': 'True'}), + 'code': ('django.db.models.fields.CharField', [], {'max_length': '255'}), + 'department': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'course'", 'to': "orm['teleforma.Department']"}), + 'description': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'title': ('django.db.models.fields.CharField', [], {'max_length': '255'}), + 'type': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'course'", 'to': "orm['teleforma.CourseType']"}) + }, + 'teleforma.coursetype': { + 'Meta': {'object_name': 'CourseType', 'db_table': "'teleforma_course_type'"}, + 'description': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}) + }, + 'teleforma.department': { + 'Meta': {'object_name': 'Department'}, + 'description': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}), + 'organization': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'department'", 'to': "orm['teleforma.Organization']"}) + }, + 'teleforma.document': { + 'Meta': {'object_name': 'Document'}, + 'code': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}), + 'conference': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'document'", 'null': 'True', 'to': "orm['teleforma.Conference']"}), + 'course': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'document'", 'to': "orm['teleforma.Course']"}), + 'credits': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}), + 'date_added': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), + 'date_modified': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}), + 'description': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}), + 'file': ('django.db.models.fields.files.FileField', [], {'max_length': '100', 'db_column': "'filename'", 'blank': 'True'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'is_annal': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'is_published': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'readers': ('django.db.models.fields.related.ManyToManyField', [], {'blank': 'True', 'related_name': "'document'", 'null': 'True', 'symmetrical': 'False', 'to': "orm['auth.User']"}), + 'title': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}) + }, + 'teleforma.iej': { + 'Meta': {'ordering': "['name']", 'object_name': 'IEJ'}, + 'description': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}) + }, + 'teleforma.media': { + 'Meta': {'object_name': 'Media'}, + 'conference': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'media'", 'null': 'True', 'to': "orm['teleforma.Conference']"}), + 'course': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'media'", 'to': "orm['teleforma.Course']"}), + 'credits': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}), + 'date_added': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), + 'date_modified': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'is_live': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'is_published': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'item': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'media'", 'null': 'True', 'to': "orm['telemeta.MediaItem']"}), + 'readers': ('django.db.models.fields.related.ManyToManyField', [], {'blank': 'True', 'related_name': "'media'", 'null': 'True', 'symmetrical': 'False', 'to': "orm['auth.User']"}) + }, + 'teleforma.oral': { + 'Meta': {'object_name': 'Oral'}, + 'code': ('django.db.models.fields.CharField', [], {'max_length': '255'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}) + }, + 'teleforma.organization': { + 'Meta': {'object_name': 'Organization'}, + 'description': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}) + }, + 'teleforma.procedure': { + 'Meta': {'object_name': 'Procedure'}, + 'code': ('django.db.models.fields.CharField', [], {'max_length': '255'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}) + }, + 'teleforma.professor': { + 'Meta': {'object_name': 'Professor'}, + 'courses': ('django.db.models.fields.related.ManyToManyField', [], {'blank': 'True', 'related_name': "'professor'", 'null': 'True', 'symmetrical': 'False', 'to': "orm['teleforma.Course']"}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'user': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'professor'", 'unique': 'True', 'to': "orm['auth.User']"}) + }, + 'teleforma.profile': { + 'Meta': {'object_name': 'Profile', 'db_table': "'teleforma_profiles'"}, + 'address': ('django.db.models.fields.TextField', [], {}), + 'city': ('django.db.models.fields.CharField', [], {'max_length': '255'}), + 'country': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}), + 'date_added': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), + 'expiration_date': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'init_password': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'language': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}), + 'postal_code': ('django.db.models.fields.CharField', [], {'max_length': '255'}), + 'telephone': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}), + 'user': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'profile'", 'unique': 'True', 'to': "orm['auth.User']"}) + }, + 'teleforma.room': { + 'Meta': {'object_name': 'Room'}, + 'description': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}), + 'organization': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'room'", 'to': "orm['teleforma.Organization']"}) + }, + 'teleforma.speciality': { + 'Meta': {'object_name': 'Speciality'}, + 'code': ('django.db.models.fields.CharField', [], {'max_length': '255'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}) + }, + 'teleforma.student': { + 'Meta': {'object_name': 'Student'}, + 'category': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'student'", 'to': "orm['teleforma.Category']"}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'iej': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'student'", 'to': "orm['teleforma.IEJ']"}), + 'oral_1': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'oral_1'", 'null': 'True', 'to': "orm['teleforma.Oral']"}), + 'oral_2': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'oral_2'", 'null': 'True', 'to': "orm['teleforma.Oral']"}), + 'oral_speciality': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'student_oral_spe'", 'null': 'True', 'to': "orm['teleforma.Speciality']"}), + 'procedure': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'student'", 'null': 'True', 'to': "orm['teleforma.Procedure']"}), + 'training': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'student'", 'null': 'True', 'to': "orm['teleforma.Training']"}), + 'user': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'student'", 'unique': 'True', 'to': "orm['auth.User']"}), + 'written_speciality': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'student_written_spe'", 'null': 'True', 'to': "orm['teleforma.Speciality']"}) + }, + 'teleforma.training': { + 'Meta': {'object_name': 'Training'}, + 'category': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'course'", 'to': "orm['teleforma.Category']"}), + 'code': ('django.db.models.fields.CharField', [], {'max_length': '255'}), + 'courses': ('django.db.models.fields.related.ManyToManyField', [], {'blank': 'True', 'related_name': "'training'", 'null': 'True', 'symmetrical': 'False', 'to': "orm['teleforma.Course']"}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}), + 'obligation': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'synthesis_note': ('django.db.models.fields.BooleanField', [], {'default': 'False'}) + }, + 'telemeta.acquisitionmode': { + 'Meta': {'ordering': "['value']", 'object_name': 'AcquisitionMode', 'db_table': "'acquisition_modes'"}, + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'value': ('telemeta.models.core.CharField', [], {'unique': 'True', 'max_length': '250'}) + }, + 'telemeta.adconversion': { + 'Meta': {'ordering': "['value']", 'object_name': 'AdConversion', 'db_table': "'ad_conversions'"}, + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'value': ('telemeta.models.core.CharField', [], {'unique': 'True', 'max_length': '250'}) + }, + 'telemeta.ethnicgroup': { + 'Meta': {'ordering': "['value']", 'object_name': 'EthnicGroup', 'db_table': "'ethnic_groups'"}, + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'value': ('telemeta.models.core.CharField', [], {'unique': 'True', 'max_length': '250'}) + }, + 'telemeta.genericstyle': { + 'Meta': {'ordering': "['value']", 'object_name': 'GenericStyle', 'db_table': "'generic_styles'"}, + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'value': ('telemeta.models.core.CharField', [], {'unique': 'True', 'max_length': '250'}) + }, + 'telemeta.language': { + 'Meta': {'ordering': "['name']", 'object_name': 'Language', 'db_table': "'languages'"}, + 'comment': ('telemeta.models.core.TextField', [], {'default': "''", 'blank': 'True'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'identifier': ('telemeta.models.core.CharField', [], {'default': "''", 'max_length': '3', 'blank': 'True'}), + 'name': ('telemeta.models.core.CharField', [], {'default': "''", 'max_length': '250', 'blank': 'True'}), + 'part1': ('telemeta.models.core.CharField', [], {'default': "''", 'max_length': '1', 'blank': 'True'}), + 'part2B': ('telemeta.models.core.CharField', [], {'default': "''", 'max_length': '3', 'blank': 'True'}), + 'part2T': ('telemeta.models.core.CharField', [], {'default': "''", 'max_length': '3', 'blank': 'True'}), + 'scope': ('telemeta.models.core.CharField', [], {'default': "''", 'max_length': '1', 'blank': 'True'}), + 'type': ('telemeta.models.core.CharField', [], {'default': "''", 'max_length': '1', 'blank': 'True'}) + }, + 'telemeta.legalright': { + 'Meta': {'ordering': "['value']", 'object_name': 'LegalRight', 'db_table': "'legal_rights'"}, + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'value': ('telemeta.models.core.CharField', [], {'unique': 'True', 'max_length': '250'}) + }, + 'telemeta.location': { + 'Meta': {'ordering': "['name']", 'object_name': 'Location', 'db_table': "'locations'"}, + 'complete_type': ('telemeta.models.core.ForeignKey', [], {'related_name': "'locations'", 'to': "orm['telemeta.LocationType']"}), + 'current_location': ('telemeta.models.core.WeakForeignKey', [], {'default': 'None', 'related_name': "'past_names'", 'null': 'True', 'blank': 'True', 'to': "orm['telemeta.Location']"}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'is_authoritative': ('telemeta.models.core.BooleanField', [], {'default': 'False'}), + 'latitude': ('telemeta.models.core.FloatField', [], {'default': 'None', 'null': 'True', 'blank': 'True'}), + 'longitude': ('telemeta.models.core.FloatField', [], {'default': 'None', 'null': 'True', 'blank': 'True'}), + 'name': ('telemeta.models.core.CharField', [], {'unique': 'True', 'max_length': '150'}), + 'type': ('telemeta.models.core.IntegerField', [], {'default': '0', 'db_index': 'True', 'blank': 'True'}) + }, + 'telemeta.locationtype': { + 'Meta': {'ordering': "['name']", 'object_name': 'LocationType', 'db_table': "'location_types'"}, + 'code': ('telemeta.models.core.CharField', [], {'unique': 'True', 'max_length': '64'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('telemeta.models.core.CharField', [], {'max_length': '150'}) + }, + 'telemeta.mediacollection': { + 'Meta': {'ordering': "['code']", 'object_name': 'MediaCollection', 'db_table': "'media_collections'"}, + 'a_informer_07_03': ('telemeta.models.core.CharField', [], {'default': "''", 'max_length': '250', 'blank': 'True'}), + 'acquisition_mode': ('telemeta.models.core.WeakForeignKey', [], {'default': 'None', 'related_name': "'collections'", 'null': 'True', 'blank': 'True', 'to': "orm['telemeta.AcquisitionMode']"}), + 'ad_conversion': ('telemeta.models.core.WeakForeignKey', [], {'default': 'None', 'related_name': "'collections'", 'null': 'True', 'blank': 'True', 'to': "orm['telemeta.AdConversion']"}), + 'alt_ids': ('telemeta.models.core.CharField', [], {'default': "''", 'max_length': '250', 'blank': 'True'}), + 'alt_title': ('telemeta.models.core.CharField', [], {'default': "''", 'max_length': '250', 'blank': 'True'}), + 'approx_duration': ('telemeta.models.core.DurationField', [], {'default': "'0'", 'blank': 'True'}), + 'booklet_author': ('telemeta.models.core.CharField', [], {'default': "''", 'max_length': '250', 'blank': 'True'}), + 'booklet_description': ('telemeta.models.core.TextField', [], {'default': "''", 'blank': 'True'}), + 'cnrs_contributor': ('telemeta.models.core.CharField', [], {'default': "''", 'max_length': '250', 'blank': 'True'}), + 'code': ('telemeta.models.core.CharField', [], {'unique': 'True', 'max_length': '250'}), + 'collector': ('telemeta.models.core.CharField', [], {'default': "''", 'max_length': '250', 'blank': 'True'}), + 'collector_is_creator': ('telemeta.models.core.BooleanField', [], {'default': 'False'}), + 'comment': ('telemeta.models.core.TextField', [], {'default': "''", 'blank': 'True'}), + 'conservation_site': ('telemeta.models.core.CharField', [], {'default': "''", 'max_length': '250', 'blank': 'True'}), + 'creator': ('telemeta.models.core.CharField', [], {'default': "''", 'max_length': '250', 'blank': 'True'}), + 'doctype_code': ('telemeta.models.core.IntegerField', [], {'default': '0', 'blank': 'True'}), + 'external_references': ('telemeta.models.core.TextField', [], {'default': "''", 'blank': 'True'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'is_published': ('telemeta.models.core.BooleanField', [], {'default': 'False'}), + 'items_done': ('telemeta.models.core.CharField', [], {'default': "''", 'max_length': '250', 'blank': 'True'}), + 'legal_rights': ('telemeta.models.core.WeakForeignKey', [], {'default': 'None', 'related_name': "'collections'", 'null': 'True', 'blank': 'True', 'to': "orm['telemeta.LegalRight']"}), + 'metadata_author': ('telemeta.models.core.WeakForeignKey', [], {'default': 'None', 'related_name': "'collections'", 'null': 'True', 'blank': 'True', 'to': "orm['telemeta.MetadataAuthor']"}), + 'metadata_writer': ('telemeta.models.core.WeakForeignKey', [], {'default': 'None', 'related_name': "'collections'", 'null': 'True', 'blank': 'True', 'to': "orm['telemeta.MetadataWriter']"}), + 'old_code': ('telemeta.models.core.CharField', [], {'default': 'None', 'max_length': '250', 'null': 'True', 'blank': 'True'}), + 'physical_format': ('telemeta.models.core.WeakForeignKey', [], {'default': 'None', 'related_name': "'collections'", 'null': 'True', 'blank': 'True', 'to': "orm['telemeta.PhysicalFormat']"}), + 'physical_items_num': ('telemeta.models.core.IntegerField', [], {'default': '0', 'blank': 'True'}), + 'public_access': ('telemeta.models.core.CharField', [], {'default': "'metadata'", 'max_length': '16', 'blank': 'True'}), + 'publisher': ('telemeta.models.core.WeakForeignKey', [], {'default': 'None', 'related_name': "'collections'", 'null': 'True', 'blank': 'True', 'to': "orm['telemeta.Publisher']"}), + 'publisher_collection': ('telemeta.models.core.WeakForeignKey', [], {'default': 'None', 'related_name': "'collections'", 'null': 'True', 'blank': 'True', 'to': "orm['telemeta.PublisherCollection']"}), + 'publisher_serial': ('telemeta.models.core.CharField', [], {'default': "''", 'max_length': '250', 'blank': 'True'}), + 'publishing_status': ('telemeta.models.core.WeakForeignKey', [], {'default': 'None', 'related_name': "'collections'", 'null': 'True', 'blank': 'True', 'to': "orm['telemeta.PublishingStatus']"}), + 'recorded_from_year': ('telemeta.models.core.IntegerField', [], {'default': '0', 'blank': 'True'}), + 'recorded_to_year': ('telemeta.models.core.IntegerField', [], {'default': '0', 'blank': 'True'}), + 'recording_context': ('telemeta.models.core.WeakForeignKey', [], {'default': 'None', 'related_name': "'collections'", 'null': 'True', 'blank': 'True', 'to': "orm['telemeta.RecordingContext']"}), + 'reference': ('telemeta.models.core.CharField', [], {'default': 'None', 'max_length': '250', 'unique': 'True', 'null': 'True', 'blank': 'True'}), + 'state': ('telemeta.models.core.TextField', [], {'default': "''", 'blank': 'True'}), + 'title': ('telemeta.models.core.CharField', [], {'max_length': '250'}), + 'travail': ('telemeta.models.core.CharField', [], {'default': "''", 'max_length': '250', 'blank': 'True'}), + 'year_published': ('telemeta.models.core.IntegerField', [], {'default': '0', 'blank': 'True'}) + }, + 'telemeta.mediaitem': { + 'Meta': {'object_name': 'MediaItem', 'db_table': "'media_items'"}, + 'alt_title': ('telemeta.models.core.CharField', [], {'default': "''", 'max_length': '250', 'blank': 'True'}), + 'approx_duration': ('telemeta.models.core.DurationField', [], {'default': "'0'", 'blank': 'True'}), + 'author': ('telemeta.models.core.CharField', [], {'default': "''", 'max_length': '250', 'blank': 'True'}), + 'code': ('telemeta.models.core.CharField', [], {'default': "''", 'unique': 'True', 'max_length': '250', 'blank': 'True'}), + 'collection': ('telemeta.models.core.ForeignKey', [], {'related_name': "'items'", 'to': "orm['telemeta.MediaCollection']"}), + 'collector': ('telemeta.models.core.CharField', [], {'default': "''", 'max_length': '250', 'blank': 'True'}), + 'collector_from_collection': ('telemeta.models.core.BooleanField', [], {'default': 'False'}), + 'collector_selection': ('telemeta.models.core.CharField', [], {'default': "''", 'max_length': '250', 'blank': 'True'}), + 'comment': ('telemeta.models.core.TextField', [], {'default': "''", 'blank': 'True'}), + 'context_comment': ('telemeta.models.core.TextField', [], {'default': "''", 'blank': 'True'}), + 'copied_from_item': ('telemeta.models.core.WeakForeignKey', [], {'default': 'None', 'related_name': "'copies'", 'null': 'True', 'blank': 'True', 'to': "orm['telemeta.MediaItem']"}), + 'creator_reference': ('telemeta.models.core.CharField', [], {'default': "''", 'max_length': '250', 'blank': 'True'}), + 'cultural_area': ('telemeta.models.core.CharField', [], {'default': "''", 'max_length': '250', 'blank': 'True'}), + 'ethnic_group': ('telemeta.models.core.WeakForeignKey', [], {'default': 'None', 'related_name': "'items'", 'null': 'True', 'blank': 'True', 'to': "orm['telemeta.EthnicGroup']"}), + 'external_references': ('telemeta.models.core.TextField', [], {'default': "''", 'blank': 'True'}), + 'file': ('telemeta.models.core.FileField', [], {'default': "''", 'max_length': '100', 'db_column': "'filename'", 'blank': 'True'}), + 'generic_style': ('telemeta.models.core.WeakForeignKey', [], {'default': 'None', 'related_name': "'items'", 'null': 'True', 'blank': 'True', 'to': "orm['telemeta.GenericStyle']"}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'language': ('telemeta.models.core.CharField', [], {'default': "''", 'max_length': '250', 'blank': 'True'}), + 'language_iso': ('telemeta.models.core.ForeignKey', [], {'related_name': "'items'", 'on_delete': 'models.SET_NULL', 'default': 'None', 'to': "orm['telemeta.Language']", 'blank': 'True', 'null': 'True'}), + 'location': ('telemeta.models.core.WeakForeignKey', [], {'default': 'None', 'to': "orm['telemeta.Location']", 'null': 'True', 'blank': 'True'}), + 'location_comment': ('telemeta.models.core.CharField', [], {'default': "''", 'max_length': '250', 'blank': 'True'}), + 'moda_execut': ('telemeta.models.core.CharField', [], {'default': "''", 'max_length': '250', 'blank': 'True'}), + 'old_code': ('telemeta.models.core.CharField', [], {'default': "''", 'max_length': '250', 'blank': 'True'}), + 'public_access': ('telemeta.models.core.CharField', [], {'default': "'metadata'", 'max_length': '16', 'blank': 'True'}), + 'recorded_from_date': ('telemeta.models.core.DateField', [], {'default': 'None', 'null': 'True', 'blank': 'True'}), + 'recorded_to_date': ('telemeta.models.core.DateField', [], {'default': 'None', 'null': 'True', 'blank': 'True'}), + 'title': ('telemeta.models.core.CharField', [], {'default': "''", 'max_length': '250', 'blank': 'True'}), + 'track': ('telemeta.models.core.CharField', [], {'default': "''", 'max_length': '250', 'blank': 'True'}), + 'vernacular_style': ('telemeta.models.core.WeakForeignKey', [], {'default': 'None', 'related_name': "'items'", 'null': 'True', 'blank': 'True', 'to': "orm['telemeta.VernacularStyle']"}) + }, + 'telemeta.metadataauthor': { + 'Meta': {'ordering': "['value']", 'object_name': 'MetadataAuthor', 'db_table': "'metadata_authors'"}, + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'value': ('telemeta.models.core.CharField', [], {'unique': 'True', 'max_length': '250'}) + }, + 'telemeta.metadatawriter': { + 'Meta': {'ordering': "['value']", 'object_name': 'MetadataWriter', 'db_table': "'metadata_writers'"}, + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'value': ('telemeta.models.core.CharField', [], {'unique': 'True', 'max_length': '250'}) + }, + 'telemeta.physicalformat': { + 'Meta': {'ordering': "['value']", 'object_name': 'PhysicalFormat', 'db_table': "'physical_formats'"}, + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'value': ('telemeta.models.core.CharField', [], {'unique': 'True', 'max_length': '250'}) + }, + 'telemeta.publisher': { + 'Meta': {'ordering': "['value']", 'object_name': 'Publisher', 'db_table': "'publishers'"}, + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'value': ('telemeta.models.core.CharField', [], {'unique': 'True', 'max_length': '250'}) + }, + 'telemeta.publishercollection': { + 'Meta': {'ordering': "['value']", 'object_name': 'PublisherCollection', 'db_table': "'publisher_collections'"}, + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'publisher': ('telemeta.models.core.ForeignKey', [], {'related_name': "'publisher_collections'", 'to': "orm['telemeta.Publisher']"}), + 'value': ('telemeta.models.core.CharField', [], {'max_length': '250'}) + }, + 'telemeta.publishingstatus': { + 'Meta': {'ordering': "['value']", 'object_name': 'PublishingStatus', 'db_table': "'publishing_status'"}, + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'value': ('telemeta.models.core.CharField', [], {'unique': 'True', 'max_length': '250'}) + }, + 'telemeta.recordingcontext': { + 'Meta': {'ordering': "['value']", 'object_name': 'RecordingContext', 'db_table': "'recording_contexts'"}, + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'value': ('telemeta.models.core.CharField', [], {'unique': 'True', 'max_length': '250'}) + }, + 'telemeta.vernacularstyle': { + 'Meta': {'ordering': "['value']", 'object_name': 'VernacularStyle', 'db_table': "'vernacular_styles'"}, + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'value': ('telemeta.models.core.CharField', [], {'unique': 'True', 'max_length': '250'}) + } + } + + complete_apps = ['teleforma'] \ No newline at end of file diff --git a/teleforma/models.py b/teleforma/models.py index 9292158f..9c1c3049 100755 --- a/teleforma/models.py +++ b/teleforma/models.py @@ -170,6 +170,8 @@ class Conference(Model): comment = CharField(_('comment'), max_length=255, blank=True) date_begin = DateTimeField(_('begin date'), null=True, blank=True) date_end = DateTimeField(_('end date'), null=True, blank=True) + readers = ManyToManyField(User, related_name="conference", verbose_name=_('readers'), + blank=True, null=True) @property def description(self): @@ -216,6 +218,8 @@ class Document(MediaBase): blank=True, null=True) is_annal = BooleanField(_('annal')) file = FileField(_('file'), upload_to='items/%Y/%m/%d', db_column="filename", blank=True) + readers = ManyToManyField(User, related_name="document", verbose_name=_('readers'), + blank=True, null=True) def is_image(self): is_url_image = False @@ -233,6 +237,12 @@ class Document(MediaBase): def __unicode__(self): return ' - '.join([self.title, unicode(self.course)]) + def set_read(self, user): + pass + + def get_read(self, user): + return user in self.readers + class Meta: db_table = app_label + '_' + 'document' @@ -248,7 +258,8 @@ class Media(MediaBase): item = ForeignKey(telemeta.models.media.MediaItem, related_name='media', verbose_name='item', blank=True, null=True) is_live = BooleanField(_('is live')) - + readers = ManyToManyField(User, related_name="media", verbose_name=_('readers'), + blank=True, null=True) def __unicode__(self): description = self.course.title diff --git a/teleforma/templates/postman/base.html b/teleforma/templates/postman/base.html index 93d06e4d..297e47b2 100644 --- a/teleforma/templates/postman/base.html +++ b/teleforma/templates/postman/base.html @@ -12,7 +12,7 @@
{% postman_unread as unread_count %}
{% endblock pm_by_modes %} -
{% paginate %}
{% csrf_token %} diff --git a/teleforma/templates/teleforma/course_detail.html b/teleforma/templates/teleforma/course_detail.html index 2986257c..e19b41ef 100644 --- a/teleforma/templates/teleforma/course_detail.html +++ b/teleforma/templates/teleforma/course_detail.html @@ -3,7 +3,7 @@ {% block courses %} {% for course in courses %} -
  • {{ course.title }}
  • +
  • {{ course.title}} {{ course.type }}
  • {% endfor %} {% endblock courses %} @@ -36,7 +36,7 @@ {% else %}
    -

    {% trans "No document" %}

    +

    {% trans "No document" %}

    {% endif %} diff --git a/teleforma/templates/teleforma/courses.html b/teleforma/templates/teleforma/courses.html index b0da6121..636ceee3 100644 --- a/teleforma/templates/teleforma/courses.html +++ b/teleforma/templates/teleforma/courses.html @@ -15,7 +15,7 @@ @@ -45,7 +45,7 @@
    {% for course in object_list %}
    -
    {{ course.title }}{% if course.description %} - {{ course.description }}{% endif %} +
    {{ course.title }} - {{ course.type }}{% if course.description %} - {{ course.description }}{% endif %}
    {% if course.conference.all or course.document.all or course.media.all %} @@ -69,7 +69,7 @@ {% endblock %} {% else %}
    -

    {% trans "No document" %}

    +

    {% trans "No document" %}

    {% endif %}
    diff --git a/teleforma/templates/teleforma/inc/document_list.html b/teleforma/templates/teleforma/inc/document_list.html index 3a289a18..93ec51df 100644 --- a/teleforma/templates/teleforma/inc/document_list.html +++ b/teleforma/templates/teleforma/inc/document_list.html @@ -9,6 +9,8 @@ {% trans "Title" %} {% trans "Description" %} {% trans "Date added" %} + {% trans "Annal" %} + @@ -17,6 +19,8 @@ {{ document.title }} {{ document.description }} {{ document.date_added }} + {{ document.is_annal }} + {% endfor %} diff --git a/teleforma/templatetags/teleforma_tags.py b/teleforma/templatetags/teleforma_tags.py index 56e31aa4..80c42f7b 100644 --- a/teleforma/templatetags/teleforma_tags.py +++ b/teleforma/templatetags/teleforma_tags.py @@ -56,3 +56,5 @@ def to_recipients(users): for user in users: list.append(user.username) return ':'.join(list) + +