Как обновить значение с помощью сигналов в Django - PullRequest
0 голосов
/ 23 октября 2019

Я пытаюсь обновить атрибут с помощью сигнала post_save, но я получаю ExceptionType: TypeError «Аргумент int () должен быть строкой, байтовым объектом или числом, а не« 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()

Также проверьте это: error

В чем может быть ошибка?

Редактировать: Это две мои модели, которые я использую здесь:

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)

1 Ответ

0 голосов
/ 23 октября 2019

Поскольку вы ищете в БД по pk, вам нужен идентификатор, а не фактический экземпляр, поэтому, чтобы исправить ошибку, вы можете сделать:

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()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...