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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如果模型中的字段为空,则在保存时删除模型实例相关的知识,希望对你有一定的参考价值。

我有一个叫做服务的模型。在用户保存模型表单后,如果正文是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()  

谢谢!

答案

如果body是空白的,你应该测试self.body == ''而不是self.body == None

您可以通过简单地编写if not self.body:来测试它们。

另一答案

试试这个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

以上是关于如果模型中的字段为空,则在保存时删除模型实例的主要内容,如果未能解决你的问题,请参考以下文章

CakePHP - 当某些字段为空时,防止模型数据保存在 saveMany 调用中

tensorflow.js 如果存在加载保存的模型,或者如果不存在,则在每个 epochEnd 回调中创建并保存模型的检查点

如果字段的值为空,则在 MySQL 中插入新记录,同时在不同的字段中添加 ID+1

MySQL 如果目标字段为空,则在字段之间复制一个字符串

如何在将jsonObject转换为模型对象时检测缺失的字段

Cakephp - 条件保存