首页 > 解决方案 > 正确使用 post_save 信号?

问题描述

我的目标是:每当创建一个新的 Note 对象时,我希望在 Review 中插入一行,对应于 OnetoOne 的 Note。每当修改 Note 时,我想以某种方式修改其在 Review 中的相应条目。

我目前已经使用 post_save 信号实现了这个(部分)。虽然,这对我来说感觉有点 hacky,我想知道在 Django 中是否有更合适的方法来做到这一点?还是我做得对。

class Review(models.Model):
    note = models.OneToOneField(Note, on_delete=models.CASCADE, primary_key=True)
    easiness = models.DecimalField(decimal_places=3,max_digits=6)
    interval = models.IntegerField()
    repetitions = models.IntegerField()
    due_date = models.DateField(auto_now=False,auto_now_add=False)
    last_reviewed = models.DateField(auto_now=True,auto_now_add=False)

class User(AbstractUser):
    pass
# Create your models here.

@receiver(post_save, sender=Note)
def append_review(sender, instance, created, **kwargs):
    blank_review = {'easiness':0,'interval':0,'repetitions':0,'due_date':date.today(),'last_reviewed':date.today()}
    if created:
        Review.objects.create(note=instance, **blank_review)
    else:
        # modify existing entry instead...

标签: pythondjango

解决方案


推荐阅读