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
相关产品推荐
相关产品推荐

