2015-10-09 3 views
0

Итак, у меня есть модель организации, я использую модель UserExtension для расширения стандартной модели пользователя. UserExtension предоставляет внешний ключ для организации.Включить одно поле из связанной модели

Я хочу выставить одно поле из организации в API-интерфейсе пользователя. Пример пользователь будет выглядеть вроде этого

{ 'username': 'test', 'org_uuid': '4AD6636C-8DC6-49BA-908C-4099C7DB0B81', ... a bunch of other fields... }

И я хочу, чтобы иметь возможность передать это создать API-интерфейсы/обновления, так что я могу установить/изменить какую организацию принадлежит пользователю. Я знаю, что могу переопределить to_representation() и to_internal_value(), но это похоже на излишний избыток для чего-то подобного. Как включить одно поле из родственной модели?

+0

Вы хотите добавить поле организатора в свой сериализатор UserExtension или добавить имя пользователя в свой сериализатор Organizer? – levi

+0

Ничего. Я был сериализатором пользователя, чтобы иметь поле org_id, соответствующее полю в UserExtension. В регулярном синтаксисе модели django я бы использовал user__userextension__org__uuid. –

ответ

0

Вы можете добавить org_uuid поле в UserExtensionSerializer с source argument. В source аргумента, мы будем использовать точечную нотацию для траверс атрибута org_uuid в соответствующем organisation объекта.

class UserExtensionSerializer(serializers.ModelSerializer): 

    org_uuid = serializers.UUIDField(source='organisation.org_uuid') # define the field 

В случае сериализации, ваше упорядоченное представление объекта будет содержать ключ org_uuid, который будет содержать значение атрибута org_uuid из соответствующего organisation объекта.

В случае создания/обновления вы можете получить доступ к значению org_uuid в serializer.validated_data.

+1

Спасибо, что это было в значительной степени тем, что я искал. В моем случае это было 'org_uuid = serializers.UUIDField (source = 'userextension.org.uuid')' –

0

В пользовательском сериализаторе вы можете добавить org serializer и изменить метод to_representation, чтобы получить требуемый формат.

+0

Переопределение представления представляет собой перебор. Кроме того, я не хочу просто какой-то org, я хочу, чтобы определенная организация, соответствующая этому пользователю. –

+0

, то, возможно, переопределить представление и получить данные из сериализатора и обновить словарь данных с любыми данными, которые вам нужны. –

Смежные вопросы