#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. Спасибо! Не понимал, что у вас могут быть как читаемые, так и доступные для записи поля сериализатора в одном классе