Hi,
Can you help me how to disable creating nested objects ?
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')
when i post json (create employee)
{
name: "name",
surname: "surname",
team: {
id: 1,
name: "Web Team"
}
}
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
And on GET (list) i would like to be able to retrieve data like:
{
name: "name",
surname: "surname",
team: {
id: 1,
name: "Web Team"
}
not like that
{
name: "name",
surname: "surname",
team: 1
}
Is there any way to to that in django rest framework (also iam using angular)
Regards
Currently serializers:
class TeamSerializer(serializers.ModelSerializer):
class Meta:
model = Team
class EmployeeSerializer(serializers.ModelSerializer):
team = TeamSerializer()
class Meta:
model = Employee
I cant use serializers.RelatedField() because it's returned only unicode I need 'id' and 'name' (i suppose)
this is my POST json: ( Restangular.all('employee').post(data) )
data: {
name: "emp1",
photo: "",
skype: "",
surname: "qweqwe",
team: {
id: 1,
name: "Web",
}
}
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 ?:)
Solved problem:
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',)
post/put method use primary key (WriteEmployeeSerializer) - before replace dict to primary key
get method use full object (ReadEmployeeSerializer)