在保存表单之前,我需要访问Django模型实例字段的先前值。例如,在form_valid
方法中,需要访问模型实例的先前值。我该如何实现?
答案 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()
注意:这仅适用于您要在创建期间不更新模型的情况。