From a50bf1ea5404fb7a67409a9679326123ab883c2e Mon Sep 17 00:00:00 2001 From: yomguy Date: Wed, 14 Dec 2011 16:29:55 +0100 Subject: [PATCH] add fund model, fix corpus model --- telemeta/admin.py | 24 +++++++ telemeta/models/media.py | 146 +++++++++++++++++++++++++-------------- 2 files changed, 118 insertions(+), 52 deletions(-) diff --git a/telemeta/admin.py b/telemeta/admin.py index 75542804..1ac11338 100644 --- a/telemeta/admin.py +++ b/telemeta/admin.py @@ -6,10 +6,27 @@ from telemeta.models.system import * from django.contrib import admin +class MediaFundAdmin(admin.ModelAdmin): + search_fields = ['title', 'code'] + ordering = ['code'] + +class MediaCorpusAdmin(admin.ModelAdmin): + search_fields = ['title', 'code'] + ordering = ['code'] + +class MediaFundCorpusRelationAdmin(admin.ModelAdmin): + pass + class MediaCollectionAdmin(admin.ModelAdmin): search_fields = ['title', 'code'] ordering = ['code'] +class MediaCorpusCollectionRelationAdmin(admin.ModelAdmin): + pass + +class MediaCollectionRelatedAdmin(admin.ModelAdmin): + search_fields = ['title', 'description'] + class MediaItemAdmin(admin.ModelAdmin): search_fields = ['title', 'code'] ordering = ['code'] @@ -59,10 +76,17 @@ class RevisionAdmin(admin.ModelAdmin): ordering = ['-time'] +admin.site.register(MediaFund, MediaFundAdmin) +admin.site.register(MediaCorpus, MediaCorpusAdmin) admin.site.register(MediaCollection, MediaCollectionAdmin) admin.site.register(MediaItem, MediaItemAdmin) admin.site.register(MediaPart, MediaPartAdmin) + admin.site.register(MediaItemRelated, MediaItemRelatedAdmin) +admin.site.register(MediaCollectionRelated, MediaCollectionRelatedAdmin) + +admin.site.register(MediaFundCorpusRelation, MediaFundCorpusRelationAdmin) +admin.site.register(MediaCorpusCollectionRelation, MediaCorpusCollectionRelationAdmin) admin.site.register(Instrument, InstrumentAdmin) admin.site.register(InstrumentAlias, InstrumentAliasAdmin) diff --git a/telemeta/models/media.py b/telemeta/models/media.py index 52ba0cc6..a86b5ee4 100644 --- a/telemeta/models/media.py +++ b/telemeta/models/media.py @@ -84,50 +84,8 @@ class MediaResource(ModelCore): class Meta: abstract = True -class MediaRelated(MediaResource): - "Related media" - - element_type = 'media' - - title = CharField(_('title')) - date = DateTimeField(_('date'), auto_now=True) - description = TextField(_('description')) - mime_type = CharField(_('mime_type'), null=True) - url = CharField(_('url'), max_length=500) - credits = CharField(_('credits')) - file = FileField(_('file'), upload_to='items/%Y/%m/%d', db_column="filename") - - def is_image(self): - is_url_image = False - if self.url: - url_types = ['.png', '.jpg', '.gif', '.jpeg'] - for type in url_types: - if type in self.url: - is_url_image = True - return 'image' in self.mime_type or is_url_image - - def save(self, force_insert=False, force_update=False): - super(MediaRelated, self).save(force_insert, force_update) - - def set_mime_type(self): - if self.file: - self.mime_type = mimetypes.guess_type(self.file.path)[0] - - def __unicode__(self): - if self.title and not re.match('^ *N *$', self.title): - title = self.title - else: - title = unicode(self.item) - return title - - class Meta: - abstract = True - - -class MediaCorpus(MediaResource): - "Describe a corpus of collections" - - element_type = 'corpus' +class MediaBaseResource(MediaResource): + "Describe a base resource" # General informations reference = CharField(_('reference'), unique=True, null=True) @@ -145,24 +103,63 @@ class MediaCorpus(MediaResource): return self.code def save(self, force_insert=False, force_update=False, user=None, code=None): - super(MediaCorpus, self).save(force_insert, force_update) + super(MediaBaseResource, self).save(force_insert, force_update) class Meta(MetaCore): - db_table = 'media_corpus' + abstract = True ordering = ['code'] -class MediaCorpusCollectionRelation(ModelCore): - "Relations between Corpus and Collections" +class MediaFund(MediaBaseResource): + "Describe a fund" + + element_type = 'fund' - collection = ForeignKey('MediaCollection', related_name="parent_relation", + class Meta(MetaCore): + db_table = 'media_funds' + verbose_name = _('fund') + + +class MediaCorpus(MediaBaseResource): + "Describe a corpus" + + element_type = 'corpus' + + class Meta(MetaCore): + db_table = 'media_corpus' + verbose_name = _('corpus') + verbose_name_plural = _('corpus') + +class MediaFundCorpusRelation(MediaResource): + "Relations between funds and corpus" + + corpus = ForeignKey('MediaCorpus', related_name="funds", + verbose_name=_('corpus')) + fund = ForeignKey('MediaFund', related_name="funds", verbose_name=_('collection')) - corpus = ForeignKey('MediaCorpus', related_name="child_relation", + + class Meta(MetaCore): + db_table = 'media_fund_corpus' + verbose_name = _('fund relation') +# unique_together = (('fund', 'corpus'),) + + def __unicode__(self): + sep = ' > ' + return self.fund.code + sep + self.corpus.code + + +class MediaCorpusCollectionRelation(MediaResource): + "Relations between corpus and collections" + + corpus = ForeignKey('MediaCorpus', related_name="corpus", verbose_name=_('corpus')) + collection = ForeignKey('MediaCollection', related_name="corpus", + verbose_name=_('collection')) class Meta(MetaCore): - db_table = 'media_corpus_collection_relations' - unique_together = (('collection', 'corpus'),) + db_table = 'media_corpus_collections' + verbose_name = _('corpus relation') +# unique_together = (('collection', 'corpus'),) def __unicode__(self): sep = ' > ' @@ -303,7 +300,46 @@ class MediaCollection(MediaResource): class Meta(MetaCore): db_table = 'media_collections' ordering = ['code'] + verbose_name = _('collection') + +class MediaRelated(MediaResource): + "Related media" + + element_type = 'media' + + title = CharField(_('title')) + date = DateTimeField(_('date'), auto_now=True) + description = TextField(_('description')) + mime_type = CharField(_('mime_type'), null=True) + url = CharField(_('url'), max_length=500) + credits = CharField(_('credits')) + file = FileField(_('file'), upload_to='items/%Y/%m/%d', db_column="filename") + def is_image(self): + is_url_image = False + if self.url: + url_types = ['.png', '.jpg', '.gif', '.jpeg'] + for type in url_types: + if type in self.url: + is_url_image = True + return 'image' in self.mime_type or is_url_image + + def save(self, force_insert=False, force_update=False): + super(MediaRelated, self).save(force_insert, force_update) + + def set_mime_type(self): + if self.file: + self.mime_type = mimetypes.guess_type(self.file.path)[0] + + def __unicode__(self): + if self.title and not re.match('^ *N *$', self.title): + title = self.title + else: + title = unicode(self.item) + return title + + class Meta: + abstract = True class MediaCollectionRelated(MediaRelated): "Collection related media" @@ -312,6 +348,8 @@ class MediaCollectionRelated(MediaRelated): class Meta(MetaCore): db_table = 'media_collection_related' + verbose_name = _('collection related media') + verbose_name_plural = _('collection related media') class MediaItem(MediaResource): @@ -383,6 +421,7 @@ class MediaItem(MediaResource): db_table = 'media_items' permissions = (("can_play_all_items", "Can play all media items"), ("can_download_all_items", "Can download all media items"), ) + verbose_name = _('item') def is_valid_code(self, code): "Check if the item code is well formed" @@ -427,6 +466,8 @@ class MediaItemRelated(MediaRelated): class Meta(MetaCore): db_table = 'media_item_related' + verbose_name = _('item related media') + verbose_name_plural = _('item related media') class MediaItemKeyword(ModelCore): @@ -486,6 +527,7 @@ class MediaPart(MediaResource): class Meta(MetaCore): db_table = 'media_parts' + verbose_name = _('item part') def __unicode__(self): return self.title -- 2.39.5