当有人推荐他们分享的内容时,我想向用户发送通知。我正在使用django-model-changes,问题类似于Django - send email on model change。所以在上述案例中,我有......
class Recommendation(ChangesMixin, models.Model):
recommend = models.BooleanField(default=None)
然后......
@receiver(post_save, sender=Recommendation)
def new_recommendation(sender, instance=None, created=False, **kwargs):
...
if created or instance.previous_instance().recommend is False:
if instance.recommend is True:
#send notification code
如果用户现在点击"推荐",则会发送通知。但问题是,如果第一次点击是"不推荐"也会发送。存储在数据库中的值在这种情况下为False。但通知仍然发送。
如果用户稍后将其建议从True切换为False或相反,则会按原样发送通知,仅在True时发送。但第一个错误是问题。
有谁知道为什么会这样?
修改
为了避免与previous_instance的复杂化,我也尝试了以下内容......
if created and instance.recommend is True:
#send notification code
结果是一样的。如果第一个操作为False(并且False肯定保存在数据库中),则代码仍会执行。
答案 0 :(得分:0)
如果为false,则询问布尔字段(t / f)为null。由于null计算结果为false,因此返回true。最好使用NullBooleanField。
与BooleanField类似,但允许NULL作为其中一个选项。使用此而不是BooleanField,其中null = True。