【问题标题】:send model form as a json response in django在 django 中将模型表单作为 json 响应发送
【发布时间】:2021-01-28 09:03:00
【问题描述】:

我想通过 json 响应modelform 发送到我的模板(我不知道这是否可能)。

实际上,在我的模板中,我有一个模型中的对象列表,当我单击它们时,我通过 ajax 或 axios 向我的视图发送一个发布请求,其中包含对象 ID,然后在视图中我正在创建模型形式该对象,我想将实例对象的模型形式发送回模板。

总结一下我如何通过json响应发送模型表单。(如果不可能如何)

更新了!

这是我的forms.py

...
class UpdateMedicalRecordForm(forms.ModelForm):
    class Meta:
        model = MedicalRecords
        fields = ("title", "file", "doctor", "doctor_access", "general_access")

        widgets = {
            "title": forms.Textarea(attrs={"rows": "", "class": "form-control", "placeholder": "Optional"}),
            "file": forms.FileInput(attrs={"class": "form-control"}),
            "doctor": forms.Select(attrs={"class": "form-control"}),
        }
        labels = {
            "title": "Description (Optional)",
            "general_access": "General Access For Record",
            "doctor_access": "Doctor Access For Record",
        }

然后在views.py 中,我通过ajax 获得medicalrecord, ID 并为该实例创建UpdateMedicalRecordForm() 模型

from_instace = UpdateMedicalRecordForm(
    request.POST, request.FILES,
    instance=get_object_or_404(MedicalRecords, id=request.POST.get("file-id"))
)

这里我不知道如何将我的回复发送回模板,将其用作 form.as_p 或循环。

...
JsonResponse({
   "form": ??
})

【问题讨论】:

  • 你能显示一些代码吗?
  • 感谢重播,我更新了我的代码。
  • 您可以将表单的数据以json的形式发送,然后用js构造您的表单
  • 感谢先生 @belhadjerSamir ,我正在尝试这个,因为我是 django 的新手,你能给我一个关于如何执行的指导,或者教程的链接。

标签: python django django-views django-forms django-templates


【解决方案1】:

你可以像这样使用 django-remote-forms :

    from django_remote_forms.forms import RemoteForm
    from django.forms.models import model_to_dict

    ####
    form = UpdateMedicalRecordForm(
        request.POST, request.FILES,
        instance=get_object_or_404(MedicalRecords, id=request.POST.get("file-id"))
    )
form['instance']=model_to_dict(form['instance'])
    remote_form = RemoteForm(form)
    remote_form_dict = remote_form.as_dict()
    response = HttpResponse(
        json.simplejson.dumps(remote_form_dict, cls=DjangoJSONEncoder),
        mimetype="application/json"
    )

    # Process response for CSRF
    csrf_middleware.process_response(request, response)
    return response

然后你可以在你的js中解析响应

【讨论】:

  • 我仍然得到 FieldFile 类型的对象不是 JSON 可序列化的
  • 我不知道仍然是相同的 FieldFile 类型的对象不是 JSON 可序列化的。 :(
  • 问题在于表单中的文件字段
  • 我刚刚从我的表单中删除了文件,这就是我现在得到的 ModelChoiceIteratorValue 类型的对象不是 JSON 可序列化的
  • 试试我的修改
猜你喜欢
  • 1970-01-01
  • 2012-05-16
  • 2016-09-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多