如果模型中的字段为空,则在保存时删除模型实例

时间:2018-07-04 23:41:58

标签: python django django-models

我有一个称为“服务”的模型。用户保存模型表单后,如果正文为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

当body为null(或blank)时,此代码无法成功删除模型实例。你知道我哪里出问题了吗?

编辑:我也尝试了以下方法:

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

谢谢!

2 个答案:

答案 0 :(得分:0)

如果body为空白,则应测试self.body == ''而不是self.body == None

您只需编写if not self.body:即可同时测试两者。

答案 1 :(得分:0)

尝试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()上都调用该信号。

如果您不太了解信号的实现,请尝试遵循本教程How to Create Django Signals