python - 正确使用 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...
解决方案
推荐阅读
- nvidia - 由于驱动器的限制为 15gb,是否可以将 30gb 的数据上传到 Google Colab?
- node.js - socket.io - 事件没有正确触发
- python - 在 Django 中发送多封邮件后 smtplib.SMTPServerDisconnected
- android - android.app.RemoteServiceException:startForeground 的错误通知:java.lang.RuntimeException:服务通知的无效通道:null
- mysql - MySQL UNION 表按列分组
- haskell - 如何重写使用 modifyIORef' 的 Haskell 函数以使用 atomicModifyIORef'
- c# - Create multiple indexes in a transaction using C# Mongodb strongly typed driver
- html - 带有复选框的导航栏汉堡菜单不起作用
- html - 第n个孩子食谱
- python - tensorflow TFRecord k-hot 编码