Django REST Framework: NestedSerializer в отношении OneToMany - PullRequest
0 голосов
/ 15 апреля 2020

У меня есть 2 родственные модели :

class Systems(models.Model):
    name = models.CharField(max_length=200)
    description = models.CharField(max_length=2000, null=True, blank=True)

class Teams(models.Model):
    system = models.ForeignKey(Systems, on_delete=models.CASCADE)
    name = models.CharField(max_length=200)
    description = models.CharField(max_length=2000, null=True, blank=True)

И 2 сериализаторы :

class System_serializer(serializers.HyperlinkedModelSerializer):
    id = serializers.ReadOnlyField

class Meta:
    model = Systems
    fields = ('id', 'name', 'description')

def create(self, validated_data):
    return Systems.objects.create(**validated_data)

def update(self, system, validated_data):
    system.name = validated_data.get('name', system.name)
    system.description = validated_data.get('description', system.description)

    system.save()
    return system

секунда:

class Team_serializer(serializers.ModelSerializer):
    id = serializers.ReadOnlyField
    system_id = System_serializer()

class Meta:
    model = Teams
    fields = ('id', 'system_id', 'name', 'description')

def create(self, validated_data):
    return Teams.objects.create(**validated_data)

def update(self, team, validated_data):
    team.name = validated_data.get('name', team.name)
    team.description = validated_data.get('description', team.description)
    team.system_id = validated_data.get('system_id', team.system_id)

    team.save()
    return team

В сущности 'team' я просто хочу иметь только идентификатор 'System', а не всю 'System'

Как я могу использовать System_serializer для сериализации 'system_id' в объекте 'team'?

Спасибо!

ADD

Я пытался использовать SlugRelatedField:

class Team_serializer(serializers.ModelSerializer):
id = serializers.ReadOnlyField
system_id = serializers.SlugRelatedField(queryset=Systems.objects.all(), slug_field='id')

class Meta:
    model = Teams
    fields = ('id', 'system_id', 'name', 'description')

Но получил

'int' object has no attribute 'id'

ADD2

Пытался использовать PrimatyKeyRelatedField:

class Team_serializer(serializers.ModelSerializer):
id = serializers.ReadOnlyField
system_id = serializers.PrimaryKeyRelatedField(queryset=Systems.objects.all())

class Meta:
    model = Teams
    fields = ('id', 'system_id', 'name', 'description')

def create(self, validated_data):
    return Teams.objects.create(**validated_data)

, но получил при создании

Field 'id' expected a number but got <Systems: Systems object (2)>.
...