Added ability to specify default metadata or metadataset per document type
This commit is contained in:
@@ -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):
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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'),
|
||||
|
||||
@@ -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')
|
||||
|
||||
Reference in New Issue
Block a user