PrimaryKeyRelatedField или вложенные отношения в Django REST

#django #django-rest-framework

#django #django-rest-framework

Вопрос:

Моя проблема в том, что я хочу получить это:

вывод

 "counter": 1,
"reference": {
   "ref": "a",
   "name": "apple",
   "description": "a fruit"
        },
"stock": 10,
 

serializers.py с PrimaryKeyRelatedField

 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, у меня есть только идентификатор, но если я использую вложенные отношения, я должен заполнить все поля, но он уже существует, я хочу выбрать из списка

Ответ №1:

У вас может быть два поля — одно только для чтения, а другое только для записи, например:

 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_id

Комментарии:

1. Спасибо! Не понимал, что у вас могут быть как читаемые, так и доступные для записи поля сериализатора в одном классе