Djangorestframework接受已提交外键字段的id

2024-09-30 01:26:05 发布

您现在位置:Python中文网/ 问答频道 /正文

我有以下型号:

class Parent(models.Model):
    name = models.CharField()

class Child(models.Model):
    name = models.CharField()
    parent = models.ForeignKey(Parent, on_delete=models.CASCADE)

使用序列化程序:

class ChildSerializer(serializers.ModelSerializer):
    class Meta:
        model = Child
        fields = ('id', 'name', 'parent',)
        read_only_fields = ('id',)

和ModelViewSet:

class ChildViewSet(viewsets.ModelViewSet):
    serializer_class = ChildSerializer
    permission_classes = (IsAuthenticated,)
    queryset = Child.objects.all()
    paginator = None

如果查询api,会得到一个json结构,如下所示:

{
  "id": 1,
  "name": "Child Name",
  "parent": 3
}

这正是我想要的。但是,如果我尝试将相同的数据放回,则会出现错误: ValueError: Cannot assign "3": "Child.parent" must be a "Parent" instance.

我怎样才能提交这样的工作?我应该能够提交我的数据,以同样的方式,我从API收到它


Tags: 数据nameidchildfieldsmodelmodelsclass
1条回答
网友
1楼 · 发布于 2024-09-30 01:26:05

您可以使用PrimaryKeyRelatedField

DRF文件示例:

class AlbumSerializer(serializers.ModelSerializer):
    tracks = serializers.PrimaryKeyRelatedField(many=True, read_only=True)

    class Meta:
        model = Album
        fields = ['album_name', 'artist', 'tracks']

您的代码很可能是:

class ChildSerializer(serializers.ModelSerializer):
    parent = serializers.PrimaryKeyRelatedField(many=True)
    class Meta:
        model = Child
        fields = ('id', 'name', 'parent',)
        read_only_fields = ('id',)

相关问题 更多 >

    热门问题