禁用创建在Django的REST框架嵌套对象 [英] Disable creating nested objects in django rest framework
问题描述
你能帮助我如何停用创建嵌套对象?结果
我有这样的序列化:
结果(雇员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屋!