禁用创建在Django的REST框架嵌套对象 [英] Disable creating nested objects in django rest framework

查看:249
本文介绍了禁用创建在Django的REST框架嵌套对象的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

你能帮助我如何停用创建嵌套对象?结果

我有这样的序列化:
结果(雇员ForeignKey的到队)

I have serializers like this:
(Employee has ForeignKey to Team)

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

或者替代可以是:

or instead could be:

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

当我张贴的JSON(创建员工)

when i post json (create employee)

{
    name: "name",
    surname: "surname",
    team: {
           id: 1,
           name: "Web Team"
          }
}

对象员工创建,也反对球队...
有没有什么办法来禁用与员工共创团队对象吗?
我只是想创建员工和设置选定的团队(有curently数据库)员工

object employee creates but also object team... is there any way to disable creating team object together with employee ? i just want to create employee and set selected team (curently in database) to employee

和对GET(名单)我想能够检索
像数据:

And on GET (list) i would like to be able to retrieve data like:

{
 name: "name",
 surname: "surname",
 team: {
    id: 1,
    name: "Web Team"
 }

不是这样的。

{
 name: "name",
 surname: "surname",
 team: 1
}

有没有什么办法来,在其余的Django框架(IAM还用角)
结果
问候

Is there any way to to that in django rest framework (also iam using angular)
Regards

目前串行:

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

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

    class Meta:
        model = Employee

我不能使用serializers.RelatedField(),因为它只是返回的 UNI code 我需要'ID'和'名'(我想)

I cant use serializers.RelatedField() because it's returned only unicode I need 'id' and 'name' (i suppose)

这是我的帖子JSON:(Restangular.all('员工')后(数据))

this is my POST json: ( Restangular.all('employee').post(data) )

data: {
        name: "emp1",
        photo: "",
        skype: "",
        surname: "qweqwe",
        team: {
              id: 1,
              name: "Web",
        }
}

和DRF返回的JSON:

and DRF returned json:

employee: {
    id: 2,
    name: "emp1",
    photo: "",
    skype: "",
    surname: "qweqwe",
    team: {
        id:3, <-- NEW ID!
        name: "Web"
    }   
}

所以啊,我相信新的团队对象创建。那现在:?)

so yea, i am sure that new team objects created. So what now ?:)

推荐答案

解决问题:

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',)

后/ put方法使用主键(WriteEmployeeSerializer) - 前更换字典到主键

post/put method use primary key (WriteEmployeeSerializer) - before replace dict to primary key

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

get method use full object (ReadEmployeeSerializer)

这篇关于禁用创建在Django的REST框架嵌套对象的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆