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