保存前如何在Django模型表单中访问字段的先前值?

时间:2019-05-25 15:03:17

标签: django django-forms

在保存表单之前,我需要访问Django模型实例字段的先前值。例如,在form_valid方法中,需要访问模型实例的先前值。我该如何实现?

2 个答案:

答案 0 :(得分:0)

假设您有MyModel表。现在,我们创建instance中的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.

希望能对您有所帮助。

答案 1 :(得分:0)

您可以使用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()

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