Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Método POST APIView Django Rest

Estou criando um Kanban, e as colunas desse Kanban será modular e o usuário poderá mudar ele de posição, para isso criei um campo ORDEM no models 'Coluna'. Quando eu já tenho um registro no banco de dados o metódo POST funciona corretamente, porém quando tento incluir o primeiro registro ele me retorna o erro 'Coluna matching query does not exist.'.

Minha View.

class ColunaView(APIView):

  permission_classes = (IsAuthenticated,)

  def post(self, request, pk, format=None):

    try:
      kanban = models.Kanban.objects.get(pk=pk)
      ordem = kanban.colunas.latest('ordem').ordem

      models.Coluna.objects.create(kanban=kanban, titulo=request.data.get('titulo'),
                                   descricao=request.data.get('descricao'),
                                   criador=request.data.get('criador'),
                                   ordem=ordem + 1)

      return Response(serializers.KanbanSerializer(kanban).data, status=status.HTTP_200_OK)

    except Exception as e:
      print(e)
      return Response(status=status.HTTP_400_BAD_REQUEST)

O Models.

class Coluna(models.Model):
  kanban = models.ForeignKey(Kanban, on_delete=models.CASCADE, related_name="colunas")
  titulo = models.CharField(max_length=100)
  descricao = models.TextField(max_length=255, null=True, blank=True)
  criador = models.CharField(max_length=20, null=True, blank=True)
  ordem = models.IntegerField(null=False, blank=False)

  def __str__(self):
    return self.titulo

  class Meta:
    default_permissions = ()

    verbose_name = "Coluna"
    verbose_name_plural = "Colunas"

Agradeço se alguem me der uma luz.

1 resposta
solução!

Não tive nenhuma resposta, por essa não esperava.

Se alguem se interessar, vou postar a solução abaixo que foi adicionado no Views.py

try:
        ordem = models.Coluna.objects.filter(kanban__pk=pk).latest('ordem').ordem
      except models.Coluna.DoesNotExist:
        ordem = 0

O código é simples e está bem auto explicativo, mas se alguem não entender eu posto uma explicação depois.