Stack Overflow em Português Asked by Antonio Braz Finizola on January 2, 2021
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.
Get help from others!
Recent Answers
Recent Questions
© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP