簡體   English   中英

django-rest-framework- 接受提交的外鍵字段的 id

[英]django-rest-framework- accepting id for submitted foreign key field

我有以下型號:

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

和模型視圖集:

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 接收數據相同的方式提交我的數據。

您可以使用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',)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM