Добавьте дополнительные поля в представление профиля пользователя в Django REST Framework.

Я использую Django 2.x и Django REST Framework и Django REST Auth

По умолчанию Django REST Auth предоставляет конечную точку для сведений о профиле, которая возвращает сведения об аутентифицированном пользователе из модели User.

Представление по умолчанию содержит поля

fields = ('pk', 'username', 'email', 'first_name', 'last_name')

и конечная точка /api/user/

Я хочу добавить больше полей в сериализатор, поскольку я использую пользовательскую модель пользователя и добавляю в нее больше полей.

Нужно ли мне создавать настраиваемое представление и переопределять класс сериализатора, или я могу расширить стандартное представление и сериализатор, добавив дополнительные поля?


person Anuj TBE    schedule 13.02.2019    source источник
comment
Что вы подразумеваете под «представлением по умолчанию»? Какой класс представления, предоставляемый DRF, делает это? Если у вас есть пользовательская модель пользователя, вы должны использовать django.contrib.auth.get_user_model() для получения модели User (которая является вашей пользовательской моделью), и тогда ваше представление сможет получить доступ ко всем полям вашей модели User.   -  person dirkgroten    schedule 13.02.2019
comment
Это UserDetailsView от rest_auth/views. Обновленный вопрос с правильной ссылкой.   -  person Anuj TBE    schedule 13.02.2019
comment
Это не часть ДРФ. Очевидно, вы используете django-rest-auth, который является дополнительным пакетом поверх DRF.   -  person dirkgroten    schedule 13.02.2019
comment
Я уверен, что rest-auth является хорошим гражданином Django и использует get_user_model(), а не django.contrib.auth.models.User, поэтому в представлении отображается ваша пользовательская модель User. Просто создайте подкласс, чтобы добавить свои собственные serializer_class с нужными вам полями. Проверьте исходный код rest_auth.   -  person dirkgroten    schedule 13.02.2019


Ответы (1)


Если вы проверите документы, вы установите это есть вариант конфигурации для пользовательских сериализаторов. Вы можете определить свой собственный serializers для каждой конечной точки, не переопределяя urls и views, добавив словарь REST_AUTH_SERIALIZERS в свои настройки django.

Пример:

REST_AUTH_SERIALIZERS = {
    'USER_DETAILS_SERIALIZER': 'path.to.custom.serializer' 
}
person Davit Tovmasyan    schedule 13.02.2019