AnswerBun.com

Como fazer update "deletando" objetos de um objeto aninhado?

Tenho esses dois models a seguir:

class Questionario(models.Model):
    numero = models.IntegerField()
    nome = models.CharField(max_length=300)

    class Meta:
        db_table = 'questionario'
        verbose_name = u'Questionario'
        verbose_name_plural = u'Questionarios'


class Pergunta(models.Model):
    ask = models.CharField(max_length=200)
    questionario = models.ForeignKey(Questionario, related_name='questionario', on_delete=models.CASCADE, null=True)

    class Meta:
        db_table = 'pergunta'
        verbose_name = u'Pergunta'
        verbose_name_plural = u'Perguntas'

Há um relacionamento de 1~N, onde para 1 Questionario tem-se N Perguntas. Estou tentando criar uma view de update que seja capaz de remover as perguntas caso elas não venham no payload.

Por exemplo:

{
    "id": 1,
    "numero": 1,
    "nome": "Perfil comportamental e preferência cerebral",
    "perguntas": [
      {
        "id": 1,
        "ask": "Eu sou..."
      },
      {
        "id": 2,
        "ask": "Eu estou..."
      }
    ]
}

O objeto acima está no banco atualmente. Quero que quando eu fornecer ele assim:

{
    "id": 1,
    "numero": 1,
    "nome": "Perfil comportamental e preferência cerebral",
    "perguntas": [
        {
            "id": 2,
            "ask": "Eu estou..."
        }
    ]
}

o objeto pergunta com id=1 seja removido e reste apenas o objeto pergunta com id=2.

Esse é o meu método de update atual:

def update(self, instance, validated_data):
    instance.numero = validated_data.get('numero', instance.numero)
    instance.nome = validated_data.get('nome', instance.nome)
    instance.save()
    perguntas = validated_data.get('questionario')

    for pergunta in perguntas:
        id_pergunta = pergunta.get('id', None)
        if id_pergunta:
            perguntaBD = Pergunta.objects.get(id=id_pergunta, questionario=instance)
            perguntaBD.ask = pergunta.get('ask', perguntaBD.ask)
            perguntaBD.save()
        else:
            pergunta = Pergunta(**pergunta)
            pergunta.questionario = instance
            pergunta.save()
    return instance

Grato pela ajuda.

Add your own answers!

Related Questions

Por que a função retorna o valor undefined

2  Asked on September 26, 2021 by lucas-ribeiro

         

Executar evento em botão tkinter

1  Asked on March 18, 2021 by rodrigo-cesarino

   

como executar uma procedure com parametro em php

1  Asked on March 6, 2021 by teste1234

   

Criar uma Trigger com JOIN para duplicar os dados

1  Asked on March 5, 2021 by richard-lucas

   

ConcurrentModificationException como proceder?

2  Asked on February 28, 2021 by roknauta

   

Materialize.css inserir icon por cima de uma imagem do card

1  Asked on February 26, 2021 by laranja-mecnica

     

Consultar grupos de distribuição do Active Directory

1  Asked on February 25, 2021 by renato-souza

 

Capturar dados de classes com python

0  Asked on February 24, 2021 by bruno-rayol

     

Como faço para não precisar ficar fazendo requisição toda hora a api?

1  Asked on February 24, 2021 by eduardo-nogueira

     

Como abrir ou fechar todos os itens de um Accordion

1  Asked on February 23, 2021 by fabrcio

     

Utilizar DataTable com Lazy dentro de vários p:tab

0  Asked on February 22, 2021 by ramon-borges

         

Renomear Extent Report após execução dos testes

0  Asked on February 22, 2021 by julliane-freitas

     

Números Palíndromos em C

1  Asked on February 21, 2021 by matheusramos43

 

Preencher lista e finalizar laço python

2  Asked on February 21, 2021 by oroborus_0

       

Formatação CSS para geração de PDF

1  Asked on February 20, 2021 by amanda-lima

   

Identificar um com jQuery

3  Asked on February 19, 2021

   

Ask a Question

Get help from others!

© 2022 AnswerBun.com. All rights reserved.