如何在 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()