Added ability to specify default metadata or metadataset per document type
This commit is contained in:
@@ -25,7 +25,7 @@ class DocumentCreateWizard(BoundFormWizard):
|
|||||||
}
|
}
|
||||||
if data not in initial:
|
if data not in initial:
|
||||||
initial.append(data)
|
initial.append(data)
|
||||||
|
|
||||||
return initial
|
return initial
|
||||||
|
|
||||||
def __init__(self, *args, **kwargs):
|
def __init__(self, *args, **kwargs):
|
||||||
@@ -36,13 +36,9 @@ class DocumentCreateWizard(BoundFormWizard):
|
|||||||
_(u'step 2 of 3: Metadata selection'),
|
_(u'step 2 of 3: Metadata selection'),
|
||||||
_(u'step 3 of 3: Document metadata'),
|
_(u'step 3 of 3: Document metadata'),
|
||||||
])
|
])
|
||||||
self.document_type = kwargs.pop('document_type', None)
|
|
||||||
|
|
||||||
super(DocumentCreateWizard, self).__init__(*args, **kwargs)
|
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):
|
def render_template(self, request, form, previous_fields, step, context=None):
|
||||||
context = {'step_title': self.extra_context['step_titles'][step]}
|
context = {'step_title': self.extra_context['step_titles'][step]}
|
||||||
return super(DocumentCreateWizard, self).render_template(
|
return super(DocumentCreateWizard, self).render_template(
|
||||||
@@ -55,6 +51,7 @@ class DocumentCreateWizard(BoundFormWizard):
|
|||||||
def process_step(self, request, form, step):
|
def process_step(self, request, form, step):
|
||||||
if isinstance(form, DocumentTypeSelectForm):
|
if isinstance(form, DocumentTypeSelectForm):
|
||||||
self.document_type = form.cleaned_data['document_type']
|
self.document_type = form.cleaned_data['document_type']
|
||||||
|
self.initial = {1: {'document_type': self.document_type}}
|
||||||
|
|
||||||
if isinstance(form, MetadataSelectionForm):
|
if isinstance(form, MetadataSelectionForm):
|
||||||
self.metadata_sets = form.cleaned_data['metadata_sets']
|
self.metadata_sets = form.cleaned_data['metadata_sets']
|
||||||
@@ -62,7 +59,7 @@ class DocumentCreateWizard(BoundFormWizard):
|
|||||||
initial_data = self.generate_metadata_initial_values()
|
initial_data = self.generate_metadata_initial_values()
|
||||||
self.initial = {2: initial_data}
|
self.initial = {2: initial_data}
|
||||||
if not 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]
|
self.form_list = [DocumentTypeSelectForm, MetadataSelectionForm]
|
||||||
|
|
||||||
if isinstance(form, MetadataFormSet):
|
if isinstance(form, MetadataFormSet):
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
from django.contrib import admin
|
from django.contrib import admin
|
||||||
|
|
||||||
from metadata.models import MetadataType, MetadataSet, MetadataSetItem, \
|
from metadata.models import MetadataType, MetadataSet, MetadataSetItem, \
|
||||||
DocumentMetadata
|
DocumentMetadata, DocumentTypeDefaults
|
||||||
|
|
||||||
|
|
||||||
class MetadataTypeAdmin(admin.ModelAdmin):
|
class MetadataTypeAdmin(admin.ModelAdmin):
|
||||||
@@ -26,5 +26,10 @@ class MetadataSetAdmin(admin.ModelAdmin):
|
|||||||
inlines = [MetadataSetItemInline]
|
inlines = [MetadataSetItemInline]
|
||||||
|
|
||||||
|
|
||||||
|
class DocumentTypeDefaultsAdmin(admin.ModelAdmin):
|
||||||
|
filter_horizontal = ('default_metadata_sets', 'default_metadata')
|
||||||
|
|
||||||
|
|
||||||
admin.site.register(MetadataType, MetadataTypeAdmin)
|
admin.site.register(MetadataType, MetadataTypeAdmin)
|
||||||
admin.site.register(MetadataSet, MetadataSetAdmin)
|
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_MODELS
|
||||||
from metadata.conf.settings import AVAILABLE_FUNCTIONS
|
from metadata.conf.settings import AVAILABLE_FUNCTIONS
|
||||||
from metadata.models import MetadataSet, MetadataType
|
from metadata.models import MetadataSet, MetadataType, \
|
||||||
|
DocumentTypeDefaults
|
||||||
|
|
||||||
|
|
||||||
class MetadataForm(forms.Form):
|
class MetadataForm(forms.Form):
|
||||||
@@ -66,6 +67,18 @@ class MetadataRemoveForm(MetadataForm):
|
|||||||
|
|
||||||
|
|
||||||
class MetadataSelectionForm(forms.Form):
|
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(
|
metadata_sets = forms.ModelMultipleChoiceField(
|
||||||
queryset=MetadataSet.objects.all(),
|
queryset=MetadataSet.objects.all(),
|
||||||
label=_(u'Metadata sets'),
|
label=_(u'Metadata sets'),
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
from django.db import models
|
from django.db import models
|
||||||
from django.utils.translation import ugettext_lazy as _
|
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_MODELS
|
||||||
from metadata.conf.settings import AVAILABLE_FUNCTIONS
|
from metadata.conf.settings import AVAILABLE_FUNCTIONS
|
||||||
@@ -30,6 +30,9 @@ class MetadataType(models.Model):
|
|||||||
|
|
||||||
|
|
||||||
class MetadataSet(models.Model):
|
class MetadataSet(models.Model):
|
||||||
|
"""
|
||||||
|
Define a group of metadata types
|
||||||
|
"""
|
||||||
title = models.CharField(max_length=48, verbose_name=_(u'title'))
|
title = models.CharField(max_length=48, verbose_name=_(u'title'))
|
||||||
|
|
||||||
def __unicode__(self):
|
def __unicode__(self):
|
||||||
@@ -72,3 +75,16 @@ class DocumentMetadata(models.Model):
|
|||||||
class Meta:
|
class Meta:
|
||||||
verbose_name = _(u'document metadata')
|
verbose_name = _(u'document metadata')
|
||||||
verbose_name_plural = _(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