Fixing timeline exportation
parent
1fa5a12d06
commit
44d46ad47b
|
@ -25,6 +25,7 @@ from django.core.files.base import ContentFile
|
|||
from django.core.exceptions import ObjectDoesNotExist
|
||||
from django.core.exceptions import ValidationError
|
||||
from django.utils.translation import ugettext as _
|
||||
from django.contrib.contenttypes.models import ContentType
|
||||
|
||||
from taiga.base.api import serializers
|
||||
from taiga.base.fields import JsonField
|
||||
|
@ -68,6 +69,21 @@ class FileField(serializers.WritableField):
|
|||
return ContentFile(decoded_data, name=data['name'])
|
||||
|
||||
|
||||
class ContentTypeField(serializers.RelatedField):
|
||||
read_only = False
|
||||
|
||||
def to_native(self, obj):
|
||||
if obj:
|
||||
return [obj.app_label, obj.model]
|
||||
return None
|
||||
|
||||
def from_native(self, data):
|
||||
try:
|
||||
return ContentType.objects.get_by_natural_key(*data)
|
||||
except Exception:
|
||||
return None
|
||||
|
||||
|
||||
class RelatedNoneSafeField(serializers.RelatedField):
|
||||
def field_from_native(self, data, files, field_name, into):
|
||||
if self.read_only:
|
||||
|
|
|
@ -40,7 +40,7 @@ from taiga.projects.votes import services as votes_service
|
|||
from .fields import (FileField, RelatedNoneSafeField, UserRelatedField,
|
||||
UserPkField, CommentField, ProjectRelatedField,
|
||||
HistoryUserField, HistoryValuesField, HistoryDiffField,
|
||||
TimelineDataField)
|
||||
TimelineDataField, ContentTypeField)
|
||||
from .mixins import (HistoryExportSerializerMixin,
|
||||
AttachmentExportSerializerMixin,
|
||||
CustomAttributesValuesExportSerializerMixin,
|
||||
|
@ -317,9 +317,10 @@ class WikiLinkExportSerializer(serializers.ModelSerializer):
|
|||
|
||||
class TimelineExportSerializer(serializers.ModelSerializer):
|
||||
data = TimelineDataField()
|
||||
data_content_type = ContentTypeField()
|
||||
class Meta:
|
||||
model = timeline_models.Timeline
|
||||
exclude = ('id', 'project', 'namespace', 'object_id')
|
||||
exclude = ('id', 'project', 'namespace', 'object_id', 'content_type')
|
||||
|
||||
|
||||
class ProjectExportSerializer(WatcheableObjectModelSerializerMixin):
|
||||
|
|
|
@ -577,6 +577,7 @@ def _store_timeline_entry(project, timeline):
|
|||
serialized.object.project = project
|
||||
serialized.object.namespace = build_project_namespace(project)
|
||||
serialized.object.object_id = project.id
|
||||
serialized.object.content_type = ContentType.objects.get_for_model(project.__class__)
|
||||
serialized.object._importing = True
|
||||
serialized.save()
|
||||
return serialized
|
||||
|
@ -725,7 +726,7 @@ def store_project_from_dict(data, owner=None):
|
|||
except err.TaigaImportError:
|
||||
# reraise known inport errors
|
||||
raise
|
||||
except:
|
||||
except Exception:
|
||||
# reise unknown errors as import error
|
||||
raise err.TaigaImportError(_("unexpected error importing project"), project)
|
||||
|
||||
|
|
Loading…
Reference in New Issue