断言失败:必须包含一个';id';对于传递给';推动';Ember.js v-2.4

断言失败:必须包含一个';id';对于传递给';推动';Ember.js v-2.4,ember.js,ember-data,serialization,Ember.js,Ember Data,Serialization,我是新来的灰烬,我找不到任何地方解决我的问题。我在stack和其他余烬论坛上读过这些问题,但似乎没有一个适合我 我正在尝试创建一个简单的注册表单。我应该注意,对于后端,我使用django。 这是我的密码: 服务器响应: [{"username":"user1","password":"123","email":"user1@example.com"}, {"username":"user2","password":"456","email":"user2@example.com"

我是新来的灰烬,我找不到任何地方解决我的问题。我在stack和其他余烬论坛上读过这些问题,但似乎没有一个适合我

我正在尝试创建一个简单的注册表单。我应该注意,对于后端,我使用django。 这是我的密码:

服务器响应:

[{"username":"user1","password":"123","email":"user1@example.com"},        
{"username":"user2","password":"456","email":"user2@example.com"}]
余烬模型:

import DS from 'ember-data';

export default DS.Model.extend({
    username: DS.attr(),
    password: DS.attr(), 
    email: DS.attr()
});
余烬适配器: 从“余烬数据”导入DS

export default DS.RESTAdapter.extend({
    host: '/api',
    contentType: 'application/json',
    dataType: 'json',

    headers: {
        username: 'XXXX',
        password: 'XXXX'
   } 
});
余烬序列化程序:

import DS from 'ember-data';

export default DS.JSONSerializer.extend({
    primaryKey: '_id'
});
余烬路线: 从“余烬”导入余烬

export default Ember.Route.extend({
    model() {
        return this.store.findAll('account');
    }
});
余烬控制器:

import Ember from 'ember';

export default Ember.Controller.extend({

    actions: {

    signup(){
        console.log('My username is: ', this.get('username'));
        console.log('My password is: ', this.get('password'));
        console.log('My email is: ', this.get('email'));

        var account = this.store.createRecord('account', {
                username: this.get('username'),
                password: this.get('password'),
                email: this.get('email')
        });

        account.save();

    }
    }
});

通过这个实现,我得到了前面提到的错误。任何帮助都将不胜感激。提前感谢您。

您的后端应该用一个id响应,即

{"id":123,"username":"user1","password":"123","email":"user1@example.com"}
您实际上不需要使用序列化程序,除非您希望特定字段充当id。因此,在上面的示例中,ember数据希望您的后端返回

{**"_id":123**,"username":"user1","password":"123","email":"user1@example.com"}
或者你可以这样做:

import DS from 'ember-data';

export default DS.JSONSerializer.extend({
    primaryKey: 'username'
});

并使用您的用户名作为id。

我修复了我的错误。问题是后端使用用户名作为id,因此ember无法识别它

Ember序列化程序的固定代码为:

import DS from 'ember-data';

export default DS.JSONSerializer.extend({
     primaryKey: 'username'
});

非常感谢您的回答Igor,我只是不知道服务器使用了什么作为id。