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

Ember.js对接Django Rest Framework时POST请求失败(媒体类型不支持)

解决Ember.js + Django Rest Framework POST请求“不支持的媒体类型”错误

我帮你梳理了代码里的几个关键问题,这些应该就是导致POST请求报错的核心原因,一步步来修复:

1. 模型名与Store调用不匹配

你的模型文件是customer.js,按照Ember Data的规则,模型名应该是单数customer,但你代码里多处用了复数customers,还写错了方法名:

  • 把this.store.findAll('customers')改成this.store.findAll('customer')
  • 把this.store.CreateRecord('customers', ...)改成this.store.createRecord('customer', ...)(注意是小写的c,Ember方法遵循驼峰式命名规则)

2. 属性获取与拼写错误

在saveCustomer动作里,有两个明显的小错误:

  • this.getProperties('name')返回的是一个对象(比如{name: '张三'}),但模型的name字段是字符串类型,应该用this.get('name')来获取单个属性值
  • 你把city拼写成了cist,这会导致字段缺失或参数错误

修正后的动作代码:

saveCustomer(){
  let customer = this.store.createRecord('customer',{
    name: this.get('name'),
    company: this.get('company'),
    city: this.get('city'),
  })
  customer.save();
}

3. 检查动作触发的依赖

你在模板里用了(route-action "saveCustomer"),这个 helper 来自ember-route-action-helper插件。如果没安装这个插件,动作可能无法正常触发:

  • 可以执行ember install ember-route-action-helper安装插件
  • 或者直接换成Ember原生的(action "saveCustomer")

4. 确保序列化格式兼容(可选)

虽然Postman测试正常,但为了让Ember Data和DRF的JSON格式完美适配,你可以添加一个序列化器:

// app/serializers/application.js
import DS from 'ember-data';

export default DS.JSONSerializer.extend({
  // 如果DRF返回的字段和Ember模型有命名差异,可以在这里配置映射
});

这个序列化器会确保Ember发送的请求是标准的application/json格式,让DRF能正确解析。

为什么会出现“不支持的媒体类型”?

之前的代码错误会导致Ember Data生成的请求数据格式异常(比如字段错误、请求路径错误),或者发送的不是DRF期望的JSON类型,所以后端返回了这个错误。修复上面的问题后,请求格式会恢复正常,错误应该就消失了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 06:36:27