Мой models.py выглядит следующим образом:
class Activity(models.Model):
name = models.CharField(max_length=50, unique=True)
description = model.TextField(max_length=500)
class Jira(models.Model):
jira_id = models.CharField(max_length=50, unique=True)
activity = model.ForeignKey(Activity, null=True on_delete=models.SET_NULL)
С одним действием может быть связано несколько билетов Jira. Поэтому я использую внешний ключ для обозначения отношения один ко многим.
Мой сериализатор для создания нового действия выглядит следующим образом:
class ActivityCreateSerializer(serializers.ModelSerializer):
name = serializers.CharField(max_length=50)
description = serializers.CharField(max_length=50)
jira_ticket = serializers.ReadOnlyField()
Мой взгляд выглядит следующим образом:
class ActivtyViewSet(viewsets.ViewSet):
def create(self, request):
serializer = ActiityCreateSerializer(data=request.data)
if serializer.is_valid():
#jira_ticket = make call to jira and get a valid ticket number
serializer.save()
return Response(serializer.data, status=status.HTTP_201_CREATED)
Как видно, при создании нового действия внешний API-интерфейсcall должен выйти в систему продажи билетов Jira, чтобы создать новый jira_ticket.Это происходит успешно, и я получаю номер jira_ticket.У меня вопрос в два раза:
- Как сохранить билет Jira в БД, поскольку он не является частью сериализатора и получается только после того, как запрос сделан из внешнего вызова API?
- Как добавить номер билета jira в выходной файл сериализатора, поскольку serializer.data является неизменным, и я не могу добавить jira_ticket к ответу dict?