我有一个模特:
class Object(Object1):
name = models.CharField(max_length=255, blank=True)
description = models.TextField(blank=True)
date_updated = models.DateTimeField(blank=True, null=True)
我想跟踪是否在date_updated字段中插入了任何内容,然后在另一个模型中创建另一个对象,而不覆盖save方法。
例如:
if date_updated:
MyModel.objects.create(type="D", user=request.user)
虽然我尝试了this,但仍然没有成功。
答案 0 :(得分:0)
抱歉,您注意到您正在引用request.user
。所以这对你不起作用。由于您需要特定的request
对象,因此最好在request
对象所指的视图中完成。
使用pre_save,您可以将当前实例的属性值与当前数据库中的属性值进行比较。
@receiver(pre_save, sender=MyModel)
def check_date(sender, instance=None, created=False, **kwargs):
changed = created or instance.date_updated != MyModel.objects.get(pk=instance.pk).date_updated
if changed:
MyModel.objects.create(type="D", user=request.user)
但是没有测试它。
答案 1 :(得分:0)
您可以使用django-model-utils中的tracker
字段。
向模型添加跟踪器:
class Object(Model):
name = models.CharField(max_length=255, blank=True)
description = models.TextField(blank=True)
date_updated = models.DateTimeField(blank=True, null=True)
tracker = FieldTracker()
您可以在save()
或其他通常更新模型的地方办理登机手续:
if object.tracker.has_changed('date_updated'):
create_new_object(data)