Django REST中的PrimaryKeyRelatedField或嵌套关系

Django REST中的PrimaryKeyRelatedField或嵌套关系,django,django-rest-framework,Django,Django Rest Framework,我的问题是我想得到这个: 输出 "counter": 1, "reference": { "ref": "a", "name": "apple", "description": "a fruit" }, "stock": 10, 带有PrimaryKeyRelatedField的se

我的问题是我想得到这个:

输出

"counter": 1,
"reference": {
   "ref": "a",
   "name": "apple",
   "description": "a fruit"
        },
"stock": 10,
带有PrimaryKeyRelatedField的serializers.py

class StockSerializer(serializers.ModelSerializer):
    counter = serializers.PrimaryKeyRelatedField(queryset=Counter.objects.all())
    reference = serializers.PrimaryKeyRelatedField(queryset=Reference.objects.all())
    
    class Meta:
        model = Stock
        fields = ['counter', 'reference', 'stock']
serializers.py与嵌套关系

class ReferenceSerializer(serializers.ModelSerializer):

    class Meta:
        model = Reference
        fields = ['ref', 'name', 'description']

class StockSerializer(serializers.ModelSerializer):
    counter = serializers.PrimaryKeyRelatedField(queryset=Counter.objects.all())
    reference = ReferenceSerializer()
    
    class Meta:
        model = Stock
        depth = 2
        fields = ['counter', 'reference', 'stock']

如果我使用PrimaryKeyRelatedField,我只有id,但是如果我使用嵌套关系,我必须填充所有字段,但它已经存在,我想从列表中选择。您可以有两个字段,一个是只读的,另一个是只读的,如下所示:

class StockSerializer(serializers.ModelSerializer):
    counter = serializers.PrimaryKeyRelatedField(queryset=Counter.objects.all())
    reference = ReferenceSerializer(read_only=True)
    reference_id = serializers.PrimaryKeyRelatedField(queryset=Reference.objects.all(), write_only=True)

当API发送数据时,它显示
reference
,当它接收输入时,它获得
reference\u id

您可以有两个字段-一个是只读的,另一个是只读的,如下所示:

class StockSerializer(serializers.ModelSerializer):
    counter = serializers.PrimaryKeyRelatedField(queryset=Counter.objects.all())
    reference = ReferenceSerializer(read_only=True)
    reference_id = serializers.PrimaryKeyRelatedField(queryset=Reference.objects.all(), write_only=True)
当API发送数据时,它显示
reference
,当它接收输入时,它获得
reference\u id