Added ability to specify default metadata or metadataset per document type

This commit is contained in:
Roberto Rosario
2011-05-30 23:44:12 -04:00
parent 12d3ec4ed5
commit 43f37ffd32
4 changed files with 40 additions and 9 deletions

View File

@@ -36,13 +36,9 @@ class DocumentCreateWizard(BoundFormWizard):
_(u'step 2 of 3: Metadata selection'),
_(u'step 3 of 3: Document metadata'),
])
self.document_type = kwargs.pop('document_type', None)
super(DocumentCreateWizard, self).__init__(*args, **kwargs)
if self.document_type:
self.initial = {0: self.generate_metadata_initial_values()}
def render_template(self, request, form, previous_fields, step, context=None):
context = {'step_title': self.extra_context['step_titles'][step]}
return super(DocumentCreateWizard, self).render_template(
@@ -55,6 +51,7 @@ class DocumentCreateWizard(BoundFormWizard):
def process_step(self, request, form, step):
if isinstance(form, DocumentTypeSelectForm):
self.document_type = form.cleaned_data['document_type']
self.initial = {1: {'document_type': self.document_type}}
if isinstance(form, MetadataSelectionForm):
self.metadata_sets = form.cleaned_data['metadata_sets']
@@ -62,7 +59,7 @@ class DocumentCreateWizard(BoundFormWizard):
initial_data = self.generate_metadata_initial_values()
self.initial = {2: initial_data}
if not initial_data:
# If there is no metadata selected end wizard
# If there is no metadata selected, finish wizard
self.form_list = [DocumentTypeSelectForm, MetadataSelectionForm]
if isinstance(form, MetadataFormSet):

View File

@@ -1,7 +1,7 @@
from django.contrib import admin
from metadata.models import MetadataType, MetadataSet, MetadataSetItem, \
DocumentMetadata
DocumentMetadata, DocumentTypeDefaults
class MetadataTypeAdmin(admin.ModelAdmin):
@@ -26,5 +26,10 @@ class MetadataSetAdmin(admin.ModelAdmin):
inlines = [MetadataSetItemInline]
class DocumentTypeDefaultsAdmin(admin.ModelAdmin):
filter_horizontal = ('default_metadata_sets', 'default_metadata')
admin.site.register(MetadataType, MetadataTypeAdmin)
admin.site.register(MetadataSet, MetadataSetAdmin)
admin.site.register(DocumentTypeDefaults, DocumentTypeDefaultsAdmin)

View File

@@ -4,7 +4,8 @@ from django.forms.formsets import formset_factory
from metadata.conf.settings import AVAILABLE_MODELS
from metadata.conf.settings import AVAILABLE_FUNCTIONS
from metadata.models import MetadataSet, MetadataType
from metadata.models import MetadataSet, MetadataType, \
DocumentTypeDefaults
class MetadataForm(forms.Form):
@@ -66,6 +67,18 @@ class MetadataRemoveForm(MetadataForm):
class MetadataSelectionForm(forms.Form):
def __init__(self, *args, **kwargs):
#document_type = kwargs.pop('document_type', None)
super(MetadataSelectionForm, self).__init__(*args, **kwargs)
document_type = getattr(self, 'initial', {}).get('document_type', None)
if document_type:
try:
defaults = document_type.documenttypedefaults_set.get()
self.fields['metadata_sets'].initial = defaults.default_metadata_sets.all()
self.fields['metadata_types'].initial = defaults.default_metadata.all()
except DocumentTypeDefaults.DoesNotExist:
pass
metadata_sets = forms.ModelMultipleChoiceField(
queryset=MetadataSet.objects.all(),
label=_(u'Metadata sets'),

View File

@@ -1,7 +1,7 @@
from django.db import models
from django.utils.translation import ugettext_lazy as _
from documents.models import Document
from documents.models import Document, DocumentType
from metadata.conf.settings import AVAILABLE_MODELS
from metadata.conf.settings import AVAILABLE_FUNCTIONS
@@ -30,6 +30,9 @@ class MetadataType(models.Model):
class MetadataSet(models.Model):
"""
Define a group of metadata types
"""
title = models.CharField(max_length=48, verbose_name=_(u'title'))
def __unicode__(self):
@@ -72,3 +75,16 @@ class DocumentMetadata(models.Model):
class Meta:
verbose_name = _(u'document metadata')
verbose_name_plural = _(u'document metadata')
class DocumentTypeDefaults(models.Model):
document_type = models.ForeignKey(DocumentType, verbose_name=_(u'document type'))
default_metadata_sets = models.ManyToManyField(MetadataSet, blank=True, verbose_name=_(u'default metadata sets'))
default_metadata = models.ManyToManyField(MetadataType, blank=True, verbose_name=_(u'default metadata'))
def __unicode__(self):
return unicode(self.document_type)
class Meta:
verbose_name = _(u'document type defaults')
verbose_name_plural = _(u'document types defaults')