Django - 如何在保存之前检索表单字段的值?

Bel*_*dar 2 django django-forms django-views

在提交模型表单之前,在保存字段值之前检索字段值的正确方法是什么?

例如,我试图获取字段"名称",因为它在表单中更改之前.我在下面这样做,但它确实有效,但我不确定这是否正确.

views.py:

if formset.is_valid():
  for form in formset:
    if form.has_changed and not form.empty_permitted:
       cd = form.cleaned_data
       new_fieldName = cd.get('name')
       old_fieldName = str(cd.get('id'))
       form.save()
Run Code Online (Sandbox Code Playgroud)

有什么建议吗?

lan*_*nzz 6

formset.is_valid将调用每个表单的is_valid方法,该方法将调用full_clean哪些调用_post_update,使用表单instance提交的值更新表单.你打电话后找到旧值的引用为时已晚formset.is_valid; 你有两个选择:

  1. 调用之前存储实例字段的副本formset.is_valid:

    saved = {}
    for form in formset.forms:
        saved[form.instance.pk] = form.instance.__dict__.copy()
        # or keep only specific fields
    
    Run Code Online (Sandbox Code Playgroud)
  2. 在调用它之前检索记录的实例save:

    original = form._meta.model.objects.get(pk=form.instance.pk)
    # compare original against form.instance and observe differences
    # save your form when you're ready:
    form.save()
    
    Run Code Online (Sandbox Code Playgroud)