禁用在Django Rest框架中创建嵌套对象

use*_*778 5 django foreign-key-relationship angularjs django-rest-framework

你好

您能帮我如何禁止创建嵌套对象吗?

我有这样的序列化器:(
员工具有对团队的ForeignKey)

class TeamSerializer(serializers.ModelSerializer):
    class Meta:
        model = Team
        fields = ('id', 'name')
class EmployeeSerializer(serializers.ModelSerializer):
    class Meta:
        model = Employee
        fields = ('id', 'name', 'surname', 'team')
        depth = 1
Run Code Online (Sandbox Code Playgroud)

或者可以是:

class EmployeeSerializer(serializers.ModelSerializer):
    team = TeamSerializer()
    class Meta:
        model = Employee
        fields = ('id', 'name', 'surname', 'team')
Run Code Online (Sandbox Code Playgroud)

当我发布json(创建员工)时

{
    name: "name",
    surname: "surname",
    team: {
           id: 1,
           name: "Web Team"
          }
}
Run Code Online (Sandbox Code Playgroud)

员工创建对象对象,但对象团队也......有什么方法可以禁止与员工一起创建团队对象?我只想创建员工并将选定的团队(当前在数据库中)设置为员工

在GET(列表)上,我希望能够检索以下数据:

{
 name: "name",
 surname: "surname",
 team: {
    id: 1,
    name: "Web Team"
 }
Run Code Online (Sandbox Code Playgroud)

不是这样的

{
 name: "name",
 surname: "surname",
 team: 1
}
Run Code Online (Sandbox Code Playgroud)

有没有什么办法来,在Django的REST框架(IAM还使用角)
的问候

更新

当前序列化器:

class TeamSerializer(serializers.ModelSerializer):
    class Meta:
        model = Team

class EmployeeSerializer(serializers.ModelSerializer):
    team = TeamSerializer()

    class Meta:
        model = Employee
Run Code Online (Sandbox Code Playgroud)

我不能使用serializers.RelatedField()因为它只返回我需要'id'和'name'的unicode(我想)

这是我的POST json:(Restangular.all('employee')。post(data))

data: {
        name: "emp1",
        photo: "",
        skype: "",
        surname: "qweqwe",
        team: {
              id: 1,
              name: "Web",
        }
}
Run Code Online (Sandbox Code Playgroud)

和DRF返回json:

employee: {
    id: 2,
    name: "emp1",
    photo: "",
    skype: "",
    surname: "qweqwe",
    team: {
        id:3, <-- NEW ID!
        name: "Web"
    }   
}
Run Code Online (Sandbox Code Playgroud)

是的,我确定创建了新的团队对象。所以现在怎么办 ?:)

use*_*778 0

已解决的问题:

class ReadEmployeeSerializer(serializers.ModelSerializer):
    team = TeamSerializer()

    class Meta:
        model = Employee
        fields = ('id', 'name', 'surname', 'team',)


class WriteEmployeeSerializer(serializers.ModelSerializer):

    def from_native(self, data, files):
        data['team'] = data['team']['id']
        return serializers.ModelSerializer.from_native(self, data, files)

    def to_native(self, obj):
        return ReadEmployeeSerializer(obj).data

    class Meta:
        model = Employee
        fields = ('id', 'name', 'surname', 'team',)
Run Code Online (Sandbox Code Playgroud)

post/put 方法使用主键 (WriteEmployeeSerializer) - 在将 dict 替换为主键之前

get 方法使用完整对象 (ReadEmployeeSerializer)