0
I am trying to use Signal to do a subtraction update on a table based on the value the user selects. an example situation:
On the table Materiais
I have the pen material with the fields: codigo_material
, descricao_material
and quantidade_estoque
.
on the table Materiais_Solicitacao
picked up the material through a ForeignKey
and I also own the field quantidade_aprovada
.
I’m trying to make the value passed in the field quantidade_aprovada
is subtracted from quantidade_estoque
.
models.py Materials
class Materiais(models.Model):
descricao_material = models.CharField('Descrição do Material', max_length=100)
codigo_material = models.IntegerField(blank=False, null=False)
almoxarifado_relacionamento = models.ForeignKey(Almoxarifado, on_delete=models.CASCADE)
quantidade_estoque = models.FloatField('Quantidade em Estoque', blank=True, null=True)
class Meta:
verbose_name = 'Material'
verbose_name_plural = 'Materiais'
def __str__(self):
return self.descricao_material
models.py Materiais_solicitacao
Class Materiais_Solicitacao(models.Model):
quantidade_material = models.FloatField('Quantidade de Material', null=False, blank=False)
quantidade_aprovada = models.FloatField('Quantidade Aprovada', blank=True, null=True)
relacionamento_materiais = models.ForeignKey(Materiais, on_delete=models.CASCADE)
relacionamento_solicitacao = models.ForeignKey(Solicitacao, on_delete=models.CASCADE)
unidade_relacionamento = models.ForeignKey(Unidade, on_delete=models.CASCADE)
class Meta:
verbose_name = 'Material da Solicitação'
verbose_name_plural = 'Material das Solicitações'
def __str__(self):
return str(self.relacionamento_materiais)
attempt of Signal that I made
def update_estoque(sender, instance, *args, **kwargs):
materiais = instance.relacionamento_materiais.all()
estoque_update = 0
for x in materiais:
estoque_update = x.quantidade_estoque - instance.quantidade_aprovada
instance.quantidade_estoque = estoque_update
print(estoque_update)
pre_save.connect(update_estoque, sender=Materiais)
py views.
class SolicitacaoCreateUpdate(PermissionRequiredMixin, UpdateView):
permission_required = 'administrativo_permissao'
raise_exception = True
model = Solicitacao
template_name = 'administrativo/administrativo_update.html'
form_class = SolicitacaoForm
def get_context_data(self, **kwargs):
context = super(SolicitacaoCreateUpdate, self).get_context_data(**kwargs)
context['materiaisList'] = Materiais_Solicitacao.objects.all().filter(relacionamento_solicitacao_id=self.object)
context['materiaisEstoque'] = Materiais.objects.all()
context['avisos'] = Aviso.objects.all()
if self.request.POST:
context['materiais'] = MateriaisFormSet(self.request.POST, instance=self.object)
else:
context['materiais'] = MateriaisFormSet(instance=self.object)
return context
def form_valid(self, form):
context = self.get_context_data()
materiais = context['materiais']
with transaction.atomic():
self.object = form.save()
if materiais.is_valid():
materiais.instance = self.object
materiais.save()
return super(SolicitacaoCreateUpdate, self).form_valid(form)
def get_success_url(self):
return reverse('detalheAdministrativo', args=(self.object.pk,))