【发布时间】:2019-05-25 15:03:16
【问题描述】:
我需要在保存表单之前访问 Django 模型实例字段的先前值。例如在form_valid 方法中需要访问模型实例的先前值。我怎样才能做到这一点?
【问题讨论】:
-
你的问题不清楚。您的模型实例的先前值是什么意思?你的意思是以前的 id ?
-
是的。我想要模型实例的先前值。
标签: django django-forms
我需要在保存表单之前访问 Django 模型实例字段的先前值。例如在form_valid 方法中需要访问模型实例的先前值。我怎样才能做到这一点?
【问题讨论】:
标签: django django-forms
您可以使用 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()
注意:这仅适用于您要更新模型而不是在创建期间。
【讨论】:
假设您有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.
希望对你有帮助。
【讨论】: