dmnBrest
@dmnBrest
Salesforce for money. Python, Go, Ruby for soul.

Как ограничить список полей в Django?

Пытаюсь замутить вроде простейшую вещь, но не получается.

Есть Модель UserProfile с кучей полей и сериализатор для этой модели (DRM) в котором все поля перечислены.

Достаю запись, передаю в сериализатор и вывожу в консоль - все работает. Показывает ВСЕ поля.

Хочу чтобы выводились только опрелеленные поля и тут засада.

Нашел что можно ограничить с помощью only и defer но что-то они отказываются работать. Все равно вижу в консоли ВСЕ поля.

up = UserProfile.objects.only('website', 'phone').get(user_id=2)
    print(up.website)
    print(up.phone)
    print(up.city)
    print(up)
    print(UserProfileSerializator(up).data)
    print(JSONRenderer().render(UserProfileSerializator(up).data))

Ожидаю что city (в четвертой строке должно быть пустое). Но оно как и все другие поля присутствуют со своими значения.

Что-то гугл не помогает мне с ответом.
  • Вопрос задан
  • 242 просмотра
Решения вопроса 1
dmnBrest
@dmnBrest Автор вопроса
Salesforce for money. Python, Go, Ruby for soul.
Вот решение которое я искал
https://github.com/rsinger86/drf-flex-fields#from-...

from rest_flex_fields import FlexFieldsModelSerializer

class CountrySerializer(FlexFieldsModelSerializer):
    class Meta:
        model = Country
        fields = ['id', 'name', 'population']

class PersonSerializer(FlexFieldsModelSerializer):
    country: CountrySerializer(fields=['name'])
    class Meta:
        model = Person
        fields = ['id', 'name', 'country', 'occupation', 'hobbies']


serializer = PersonSerializer(person, fields=["id", "name", "country.name"])
print(serializer.data)

>>>{
  "id" : 13322
  "name" : "John Doe",
  "country" : {
    "name" : "United States",
  }
}
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы