Использование Django restDjango REST: Вложенный объект добавить на создание (POST) не просто обновить (PUT)
Ниже, как у меня была serializer.py.
class ProfileSerializer(serializers.ModelSerializer):
class Meta:
model = Profile
fields = ('id', 'name', 'active', 'type')
Тип является flatview
Затем я изменил его так «тип» был вложен для каждого профиля, как это ...
class TypeSerializer(serializers.ModelSerializer):
class Meta:
model = Type
fields = ('id', 'name', 'active')
class ProfileSerializer(serializers.ModelSerializer):
type = TypeSerializer()
class Meta:
model = Profile
fields = ('id', 'name', 'active', 'type'')
теперь это работает отлично, но я не могу теперь только обновляйте «тип», когда в деталях профиля он теперь доступен только для чтения.
Как добавить тип при создании нового профиля и сохранить его вложенное представление?
Надеюсь, я объяснил это четко.
UPDATE:
Хорошо, я только что прочитал это:
Примечание: Вложенные сериализаторов пригодны только только для чтения представлений, так как есть случаи, когда они имеют неоднозначный или неочевидное поведение, если используется при обновлении экземпляров. Для представлений «чтение-запись» вы всегда должны использовать плоское представление, используя один из подклассов RelatedField.
Так что это имеет смысл. Так что я изменил его ....
type = serializers.PrimaryKeyRelatedField()
Это ставит его обратно в POST и работе, но это позор, я не могу представить «тип» с ID и имя, так что имеет смысл в конечный пользователь?
я обнаружил, что SlugRelatedField позволяют мне в настоящее время перехода от ид к чему-то осмысленному как название или имя поля, но тем используя плоское поле, не вложенное. Я буду повторять попытку с вложенным и посмотреть, может ли переопределить работу. – jason
Можете ли вы объяснить, как мы можем проверить другие поля здесь? – CrazyGeek