You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Django REST如何向包含JSONField的已有模型提交联系人表单数据

实现方案

以下基于Django生态给出可直接落地的实现逻辑,全程不需要新建Contacts模型:


1. 定义字段校验规则

首先定义非模型绑定的序列化器/表单,用来校验提交的字段合法性,规则和你原Contacts模型的字段约束保持一致:

如果你用DRF(Django REST Framework)开发接口

from rest_framework import serializers

class ContactFormSerializer(serializers.Serializer):
    full_name = serializers.CharField(max_length=100, allow_blank=True, default="")
    email = serializers.EmailField()
    phone = serializers.CharField(max_length=16)
    address = serializers.CharField(max_length=255, allow_blank=True, default="")
    message = serializers.CharField()

如果你用原生Django开发接口

from django import forms

class ContactForm(forms.Form):
    full_name = forms.CharField(max_length=100, required=False, empty_value="")
    email = forms.EmailField()
    phone = forms.CharField(max_length=16)
    address = forms.CharField(max_length=255, required=False, empty_value="")
    message = forms.CharField(widget=forms.Textarea)

2. 编写POST接口逻辑

我们用固定值contact_form作为Core模型的slug标识,方便后续筛选所有联系表单留言,校验通过的字段直接作为字典存入JSONField字段example即可:

DRF视图代码

from rest_framework.views import APIView
from rest_framework.response import Response
from rest_framework import status
from .models import Core
from .serializers import ContactFormSerializer

class ContactFormSubmitView(APIView):
    def post(self, request):
        # 校验参数合法性
        serializer = ContactFormSerializer(data=request.data)
        serializer.is_valid(raise_exception=True)
        # 直接存入Core模型
        Core.objects.create(
            slug="contact_form",
            example=serializer.validated_data
        )
        return Response({"status": "success", "msg": "留言提交成功"}, status=status.HTTP_201_CREATED)

原生Django视图代码

from django.http import JsonResponse
from .models import Core
from .forms import ContactForm

def contact_submit(request):
    if request.method != "POST":
        return JsonResponse({"status": "error", "msg": "仅支持POST请求"}, status=405)
    form = ContactForm(request.POST)
    if not form.is_valid():
        return JsonResponse({"status": "error", "msg": "参数错误", "errors": form.errors}, status=400)
    # 直接存入Core模型
    Core.objects.create(
        slug="contact_form",
        example=form.cleaned_data
    )
    return JsonResponse({"status": "success", "msg": "留言提交成功"}, status=201)

3. 配置路由

DRF路由

from django.urls import path
from .views import ContactFormSubmitView

urlpatterns = [
    path('api/contact/submit/', ContactFormSubmitView.as_view(), name='contact_submit'),
]

原生Django路由

from django.urls import path
from .views import contact_submit

urlpatterns = [
    path('api/contact/submit/', contact_submit, name='contact_submit'),
]

附加说明

  • 后续查询所有联系表单留言直接执行Core.objects.filter(slug="contact_form")即可,每个实例的example字段会自动反序列化为字典,可直接读取各个表单字段
  • 如果需要区分不同场景的联系表单,可自定义不同的slug值做分类,无需调整模型结构

内容的提问来源于stack exchange,提问作者Reactoo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 08:18:02