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

基于Angular 6与DRF的求职网站:JSON数组序列化存储问询

在Django REST Framework中处理interests数组字段的正确序列化写法

嘿,刚好之前做过类似的求职申请系统,给你梳理下DRF里处理这个interests字符串数组字段的正确姿势:

第一步:先搞定模型层的存储

根据你用的数据库不同,有两种常用的存储方案:

  • 如果是PostgreSQL数据库,最贴合的是用ArrayField专门存储字符串数组,这是PostgreSQL的原生支持,操作起来最方便:
from django.db import models
from django.contrib.postgres.fields import ArrayField

class JobApplication(models.Model):
    firstname = models.CharField(max_length=100)
    lastname = models.CharField(max_length=100)
    # 存储字符串数组,默认值设为空数组
    interests = ArrayField(models.CharField(max_length=100), default=list)
    # 其他求职相关字段(比如邮箱、简历链接等)...
  • 如果是MySQL、SQLite这类通用数据库,用JSONField来存储数组格式的数据就可以了,Django会自动帮你处理JSON的序列化和反序列化:
from django.db import models

class JobApplication(models.Model):
    firstname = models.CharField(max_length=100)
    lastname = models.CharField(max_length=100)
    # 用JSONField存数组,默认空数组
    interests = models.JSONField(default=list)
    # 其他字段...

第二步:配置DRF序列化器

这是核心步骤,你需要用DRF的ListField配合CharField来定义这个字段,这样就能完美解析前端传来的interests数组,同时把数据库里的数据序列化为JSON数组返回:

from rest_framework import serializers
from .models import JobApplication

class JobApplicationSerializer(serializers.ModelSerializer):
    # 明确指定interests是由字符串组成的数组
    interests = serializers.ListField(
        child=serializers.CharField(max_length=100)
    )

    class Meta:
        model = JobApplication
        # 把需要序列化的字段都列在这里
        fields = ['firstname', 'lastname', 'interests', ...]

第三步:验证效果

现在当你的Angular前端提交这样的JSON数据时:

{
  "firstname": "Firstname",
  "lastname": "Lastname",
  "interests": ["hobby1", "hobby2", "hobby3", "hobby4"]
}

DRF会自动验证每个interests元素都是符合长度要求的字符串,然后正确存储到数据库里。反过来,当你查询这条申请记录时,序列化器也会把数据库里的数组转化为标准JSON数组返回给前端,完全匹配你的需求。

额外优化提示

  • 如果需要限制interests的可选值(比如只能选预设的兴趣标签),可以把child换成ChoiceField:
interests = serializers.ListField(
    child=serializers.ChoiceField(choices=[('coding', '编程'), ('reading', '阅读'), ('sports', '运动')])
)
  • 如果前端可能传来空数组或者null值,可以添加参数适配:
interests = serializers.ListField(
    child=serializers.CharField(max_length=100),
    allow_empty=True,  # 允许空数组
    allow_null=True    # 允许传null
)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 03:34:16