Удаление экземпляра модели при сохранении, если поле в модели равно нулю - PullRequest
0 голосов
/ 05 июля 2018

У меня есть модель под названием Services. После сохранения пользователем формы модели я бы хотел, чтобы экземпляр модели был удален, если тело имеет значение null. Вот моя модель:

class Services(models.Model):
    user = models.ForeignKey(User, on_delete=models.CASCADE, default=None)
    heading = models.CharField(max_length=60, null=True, blank=True)
    body = models.TextField(max_length=5000, null=True, blank=True)
    price = models.CharField(max_length=100, null=True, blank=True)

    def __str__(self):
        return self.user.username    

    def save(self, *args, **kwargs):
        super(Services, self).save(*args, **kwargs)
        if self.body == None:  #also tried if bool(self.body) == False:
            self.delete()
        else:
            pass

Этот код не удаляется при удалении экземпляра модели, когда тело имеет значение null (или blank). Вы знаете, где я ошибся?

Редактировать: я также пробовал следующее безрезультатно:

@receiver(models.signals.post_save, sender=Services)
def delete_services(sender, instance, **kwargs):
    if bool(instance.body) == False:
        instance.delete()  

Спасибо!

Ответы [ 2 ]

0 голосов
/ 05 июля 2018

Попробуйте этот singal фрагмент

@receiver(models.signals.post_save, sender=Services)
def delete_services(sender, instance=None, created=False, **kwargs):
    if created and not instance.body:
        instance.delete()

Примечание
1. Удалите save() из вашего models (нет необходимости переопределять;))
2. Убедитесь, что сигнал вызывается на каждом save().

Если вы не очень осведомлены о реализации сигналов, попробуйте следовать этому руководству, Как создавать сигналы Django

0 голосов
/ 05 июля 2018

Если body пусто, вы должны проверить self.body == '' вместо self.body == None.

Вы можете проверить оба вместе, просто написав if not self.body:.

...