【发布时间】:2017-03-23 11:41:46
【问题描述】:
我在 models.py 中使用了信号,但是当我求和时,这个函数会执行两次,而不是仅仅求和
models.py:
class Articulo(models.Model):
cod_experto = models.CharField(max_length=999, primary_key=True, blank=True)
nombre = models.CharField(max_length=999, blank=True)
descripcion = models.CharField(max_length=999, blank=True, null=True)
on_delete=models.CASCADE)
stock = models.IntegerField(blank=True, default=0)
total_pedido =models.IntegerField(blank=True, default=0)
class Pedido(models.Model):
especialidad = models.ForeignKey('Especialidad')
articulo = models.ForeignKey('Articulo')
blank=True)
cantidad = models.IntegerField(blank=True) default='pendiente')
def __str__(self):
return '{}'.format(self.especialidad, self.articulo, self.cantidad, self.estado)
def update_total(sender, instance, **kwargs):
instance.articulo.total_pedido += instance.cantidad
instance.articulo.save()
# register the signal
signals.post_save.connect(update_total,sender=Pedido, dispatch_uid="update_stock_count")
views.py
def Cant_ingresar(request, id_pedido, id_especialidad):
especialidad = Especialidad.objects.get(id=id_especialidad)
pedido = Pedido.objects.get(id=id_pedido)
if request.method == 'GET':
form = PedidoEditForm(instance=pedido)
else:
form = PedidoEditForm(request.POST, instance=pedido)
if form.is_valid():
form.save()
"""
pedido.estado = 'pendiente'
pedido.fecha_pedido = datetime.date.today()
pedido.save()
especialidad.estado='pendiente'
especialidad.save()
"""
return HttpResponseRedirect('/solicitar/lista_active/%s/' % id_especialidad)
return render(request, 'form.html', {'form':form, 'pedido':pedido, 'especialidad':especialidad, 'pedido':pedido})
如您所见,我首先保存在views.py的def中输入的候选人,然后在模型中使用post_save捕获的信号量并与Articulo模型的total_pedido相加,这没有问题,但添加两次相同的金额,即输入 3,total_pedido 为 6。
【问题讨论】:
-
看看this。这可能是您正在寻找的。span>
-
你的代码格式可以吗?