【问题标题】:How to access previous value of a field in django model form before save?如何在保存之前访问 django 模型表单中字段的先前值?
【发布时间】:2019-05-25 15:03:16
【问题描述】:

我需要在保存表单之前访问 Django 模型实例字段的先前值。例如在form_valid 方法中需要访问模型实例的先前值。我怎样才能做到这一点?

【问题讨论】:

  • 你的问题不清楚。您的模型实例的先前值是什么意思?你的意思是以前的 id ?
  • 是的。我想要模型实例的先前值。

标签: django django-forms


【解决方案1】:

您可以使用 copy 复制您以前的模型实例,这样当您保存新实例时它不会覆盖您以前的实例:

import copy

if form.is_valid():
    obj = YourModel.objects.get(pk=form.instance.pk)
    prev_obj = copy.copy(obj)
    // here you can access any field of your previous object related to that instance.
    // prev_obj.field
    new_obj = form.save()

注意:这仅适用于您要更新模型而不是在创建期间。

【讨论】:

    【解决方案2】:

    假设您有MyModel 表。现在让我们创建instance of MyModel,并返回一个实例(row)。

    mymodel_instance = MyModel.objects.get(pk=14) # This returns instance of MyModel.
    # Now lets get all values, before mymode_instance.
    mymodel_qs = MyModel.objects.filter(pk__lt=mymodel_instance.pk) # This returns QuerySet (All values before mymodel_instance).
    # iterate over all previous values.
    for mymodel_obj in mymodel_qs:
        print(mymodel_obj, mymodel_obj.pk) # This will print all previous instance and id.
    

    希望对你有帮助。

    【讨论】:

      猜你喜欢
      • 2012-02-14
      • 1970-01-01
      • 2016-06-29
      • 1970-01-01
      • 1970-01-01
      • 2020-07-23
      • 1970-01-01
      • 1970-01-01
      • 2023-01-28
      相关资源
      最近更新 更多