我有 2 个型号:
class TranslatedLesson(models.Model):
created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now=True)
amount_steps = models.IntegerField(default=0)
class TranslationStep(models.Model):
lesson = models.ForeignKey(TranslatedLesson, on_delete=models.CASCADE, related_name="steps")
created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now=True)
@receiver(post_save, sender=TranslationStep,
dispatch_uid="update_lesson_date")
def update_lesson_date(sender, instance, **kwargs):
lesson = instance.lesson
lesson.update_date = instance.updated_at
lesson.save()
每次更新 TranslationStep
模型时,我都想更新 updated_at
时间,这是 TranslatedLesson
的时间。但上面的代码给了我不同的结果,因为教训进一步保存了一点。即使我删除 auto_now=True
并覆盖 .save 方法,它也不会给出所需的结果。
>>> step.updated_at
datetime.datetime(2017, 7, 27, 7, 59, 24, 912420, tzinfo=<UTC>)
>>> lesson.updated_at
datetime.datetime(2017, 7, 27, 7, 59, 24, 919461, tzinfo=<UTC>)
如何同步更新?
最佳答案
由于您希望 TranslatedLesson.save()
自动 update_date
,因此您不能在此处使用 TranslatedLesson.save()
。解决方案是 using QuerySet.update()
instead 绕过对 TranslatedLesson.save()
的调用:
receiver(post_save, sender=TranslationStep, dispatch_uid="update_lesson_date")
def update_lesson_date(sender, instance, **kwargs):
qs = TranslatedLesson.objects.filter(id=instance.lesson_id)
qs.update(updated_at=instance.updated_at)
关于python - 如何在Django模型中同步更新实例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45345407/