如何在 Django 中使用信号更新值
How to update a value with signals in Django
我正在尝试使用 post_save 的信号更新属性,但我收到 ExceptionType: TypeError "int() argument must be a string, a bytes-like object or a number, not 'Pedido'",我不知道这个错误是什么。
这是我的信号:
@receiver(post_save, sender=Venta)
def update_thread(sender, **kwargs):
instance = kwargs['instance']
obj = Pedido.objects.get(pk=instance.pedido)
obj.estado = "Finalizado"
ob.save()
同时检查一下:
可能是什么错误?
编辑:
这是我在这里使用的两个模型:
class Pedido(models.Model):
total = models.DecimalField(max_digits=10, decimal_places=2, default=0)
fecha = models.DateField(default=datetime.now, null=True, blank=True)
estado = models.CharField(max_length=20, default='Pendiente')
cliente = models.CharField(max_length=50, default='Agregue Cliente')
observacion = models.CharField(max_length=200, null=False, default='Ninguna')
def get_absolute_url(self):
return reverse('control:pedido-detail', args=[str(self.id)])
def __str__(self):
return str(self.id)
class Venta(models.Model):
fecha = models.DateField(default=datetime.now, null=True, blank=True)
pedido = models.ForeignKey(Pedido, db_column='pedido_id', on_delete=models.SET_NULL, null=True)
total = models.CharField(max_length=200, default=1)
cliente = models.CharField(max_length=100)
nit = models.CharField(max_length=10)
def get_absolute_url(self):
return reverse('control:venta-detail', args=[str(self.id)])
def __str__(self):
return str(self.id)
由于您是通过 pk
搜索数据库,因此您需要一个 ID,而不是实际实例,因此要修复您的错误,您可以这样做:
obj = Pedido.objects.get(pk=instance.pedido.pk)
然而,这是一种循环 - 因为你有一个 ForeignKey
你应该能够直接访问相关对象,不需要进行数据库查找。
obj = instance.pedido
obj.estado = "Finalizado"
obj.save() # note there is a typo in your original code here - was ob.save()
我正在尝试使用 post_save 的信号更新属性,但我收到 ExceptionType: TypeError "int() argument must be a string, a bytes-like object or a number, not 'Pedido'",我不知道这个错误是什么。
这是我的信号:
@receiver(post_save, sender=Venta)
def update_thread(sender, **kwargs):
instance = kwargs['instance']
obj = Pedido.objects.get(pk=instance.pedido)
obj.estado = "Finalizado"
ob.save()
同时检查一下:
可能是什么错误?
编辑: 这是我在这里使用的两个模型:
class Pedido(models.Model):
total = models.DecimalField(max_digits=10, decimal_places=2, default=0)
fecha = models.DateField(default=datetime.now, null=True, blank=True)
estado = models.CharField(max_length=20, default='Pendiente')
cliente = models.CharField(max_length=50, default='Agregue Cliente')
observacion = models.CharField(max_length=200, null=False, default='Ninguna')
def get_absolute_url(self):
return reverse('control:pedido-detail', args=[str(self.id)])
def __str__(self):
return str(self.id)
class Venta(models.Model):
fecha = models.DateField(default=datetime.now, null=True, blank=True)
pedido = models.ForeignKey(Pedido, db_column='pedido_id', on_delete=models.SET_NULL, null=True)
total = models.CharField(max_length=200, default=1)
cliente = models.CharField(max_length=100)
nit = models.CharField(max_length=10)
def get_absolute_url(self):
return reverse('control:venta-detail', args=[str(self.id)])
def __str__(self):
return str(self.id)
由于您是通过 pk
搜索数据库,因此您需要一个 ID,而不是实际实例,因此要修复您的错误,您可以这样做:
obj = Pedido.objects.get(pk=instance.pedido.pk)
然而,这是一种循环 - 因为你有一个 ForeignKey
你应该能够直接访问相关对象,不需要进行数据库查找。
obj = instance.pedido
obj.estado = "Finalizado"
obj.save() # note there is a typo in your original code here - was ob.save()