diff --git a/taiga/export_import/serializers.py b/taiga/export_import/serializers.py index cb2ea35d..807d8d42 100644 --- a/taiga/export_import/serializers.py +++ b/taiga/export_import/serializers.py @@ -72,6 +72,24 @@ class UserRelatedField(serializers.RelatedField): return None +class UserPkField(serializers.RelatedField): + read_only = False + + def to_native(self, obj): + try: + user = users_models.User.objects.get(pk=obj) + return user.email + except users_models.User.DoesNotExist: + return None + + def from_native(self, data): + try: + user = users_models.User.objects.get(email=data) + return user.pk + except users_models.User.DoesNotExist: + return None + + class CommentField(serializers.WritableField): read_only = False @@ -112,10 +130,10 @@ class HistoryUserField(JsonField): def from_native(self, data): if data is None: - return [] + return {} if len(data) < 2: - return [] + return {} return {"pk": UserRelatedField().from_native(data[0]).pk, "name": data[1]} @@ -125,14 +143,14 @@ class HistoryValuesField(JsonField): if obj is None: return [] if "users" in obj: - obj['users'] = map(HistoryUserField().to_native, obj['users']) + obj['users'] = list(map(UserPkField().to_native, obj['users'])) return obj def from_native(self, data): if data is None: return [] if "users" in data: - data['users'] = map(HistoryUserField().from_native, data['users']) + data['users'] = list(map(UserPkField().from_native, data['users'])) return data @@ -140,15 +158,18 @@ class HistoryDiffField(JsonField): def to_native(self, obj): if obj is None: return [] + if "assigned_to" in obj: - obj['assigned_to'] = HistoryUserField().to_native(obj['assigned_to']) + obj['assigned_to'] = list(map(UserPkField().to_native, obj['assigned_to'])) + return obj def from_native(self, data): if data is None: return [] + if "assigned_to" in data: - data['assigned_to'] = HistoryUserField().from_native(data['assigned_to']) + data['assigned_to'] = list(map(UserPkField().from_native, data['assigned_to'])) return data @@ -289,6 +310,7 @@ class TaskExportSerializer(HistoryExportSerializerMixin, AttachmentExportSeriali class UserStoryExportSerializer(HistoryExportSerializerMixin, AttachmentExportSerializerMixin, serializers.ModelSerializer): role_points = RolePointsExportSerializer(many=True, required=False) owner = UserRelatedField(required=False) + assigned_to = UserRelatedField(required=False) status = ProjectRelatedField(slug_field="name") milestone = ProjectRelatedField(slug_field="name", required=False) watchers = UserRelatedField(many=True, required=False) diff --git a/taiga/projects/userstories/models.py b/taiga/projects/userstories/models.py index 8aa7c007..8c1b3020 100644 --- a/taiga/projects/userstories/models.py +++ b/taiga/projects/userstories/models.py @@ -154,6 +154,8 @@ class UserStory(OCCModelMixin, WatchedModelMixin, BlockedMixin, TaggedMixin, mod @receiver(models.signals.post_save, sender=UserStory, dispatch_uid="user_story_create_role_points_handler") def us_create_role_points_handler(sender, instance, **kwargs): + if instance._importing: + return instance.project.update_role_points(user_stories=[instance])