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

如何在React表单中渲染Django的APPRAISAL_TYPE选项?

解决Django整数字段与React Select组件类型不匹配问题

问题根源

你的Django模型中category是IntegerField,但React组件里传递给Select的value或提交的值不是整数类型,导致后端校验时抛出"期望整数"的错误。

解决方案

1. 确保Select选项的value为整数类型

首先要保证categoryOptions的每个选项value是数字,而非字符串:

// 前端定义选项(或从后端接口获取正确格式的choices)
const categoryOptions = [
  { value: 1, label: '自评' },
  { value: 2, label: '直属经理评估' },
  { value: 3, label: 'COO评估' }
];

如果是从后端获取choices(比如Django返回APPRAISAL_TYPE.choices),要确保前端转换时保留value的整数类型,避免自动转成字符串。

2. 修正Select的value绑定

不要通过APPRAISAL_TYPE[appraisalDetails.status]取值(这会得到键名而非数字),直接绑定后端返回的category整数值:

<Select
  name="category"
  value={appraisalDetails.category} // 这里直接用整数类型的category值
  options={categoryOptions}
  onChange={(option) => handleChange(option, "category")}
/>

如果appraisalDetails里存储的是状态名称(比如"self_appraisal"),需要在前端定义对应映射并转成数字:

// 前端映射Django的APPRAISAL_TYPE
const APPRAISAL_TYPE_MAP = {
  self_appraisal: 1,
  line_manager: 2,
  coo: 3
};

// 绑定value时转成整数
value={APPRAISAL_TYPE_MAP[appraisalDetails.status]}

3. 处理onChange事件,确保提交值为整数

在handleChange中,明确将选中的value转为整数(避免Select组件返回字符串的情况):

const handleChange = (option, field) => {
  setAppraisalDetails(prev => ({
    ...prev,
    [field]: Number(option.value) // 强制转为整数类型
  }));
};

4. 额外检查:接口传参格式

提交表单时,确保category字段以整数形式发送给后端,避免JSON序列化时自动转成字符串。比如用Axios提交时,直接传递数字即可,不需要额外转换。


内容的提问来源于stack exchange,提问作者Ra'ees Bello

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 08:55:17