Executando verificação de segurança...
1

[BUG] Signals do Django estao dando confitos

Fala Galera do Python! Estou implementando um carrinho de compras no meu projeto que tem 3 models nesse problema: produtos, carrinhoitem e carrinho. Estava fazendo um codigo para evitar dois items iguais no carrinho usando signals pre_save. Entretanto, com isso funcionando eu nao to conseguindo mais dar update em produto pois toda vez que faco isso o mesmo nao altera a quantidade. Acredtido que seja por causa da impletacao da verificacao de produto ja existente no carrinho. Voces tem alguma idea de como conseguir evitar a repeticao de produto e ao mesmo tempo permitir o update? Obs: O update por padrao do django esta sendo um "POST carrinhoitems/id/change" e adicionar um novo "POST carrinhositems/add"

validacao

#valida preco e quantidade e coloca no carrinho e usuarios
@receiver(pre_save,sender=CarrinhoItem)
def calcula_preco(sender,**kwargs):
    
    carrinho_item = kwargs['instance']
    produto = Produto.objects.get(id=carrinho_item.produto_id.id)
    carrinho = Carrinho.objects.get(id=carrinho_item.carrinho.id)

    

   # Check if an item with the same product already exists in the cart
    existing_item = CarrinhoItem.objects.filter(
        carrinho=carrinho,
        produto_id=produto,
        user_id=carrinho_item.user_id,
    ).first()
     
    
    # #valida repeticao de produto
    if existing_item:
        add_existente(carrinho_item,existing_item,carrinho,produto)

carrinhoitem

class CarrinhoItem(models.Model):
    carrinho = models.ForeignKey(Carrinho,on_delete=models.CASCADE)
    user_id = models.ForeignKey(AppUser,on_delete=models.CASCADE,default=None)
    produto_id = models.ForeignKey(Produto,on_delete=models.CASCADE)
    quantidade = models.IntegerField(default=1)
    preco_unitario = models.FloatField(default=0)
    preco = models.FloatField(default=0)
    total_items=models.IntegerField(default=0)

    def __str__(self):
        return f"{self.produto_id.nome}"
Carregando publicação patrocinada...