Django сериализаторы против метода значений - PullRequest
0 голосов
/ 24 апреля 2020

Какая разница в использовании Model_Name.Objects.values ​​(). Get () и сериализаторов для получения данных не в форме объектов модели?

Ответы [ 2 ]

0 голосов
/ 24 апреля 2020

Сериализатор используется для нескольких целей. Для каждого метода запроса это имеет различное назначение.

  1. Для GET это даст вам данные в представительной форме
  2. Для PUT / POST / PATCH будет использоваться для проверки данных и сохранение после проверки и выполнение любых бизнес-логи после сохранения c.

Если в вашем API есть только метод GET, вы можете использовать метод .values. В противном случае лучше использовать сериализатор. Но сериализатор даст вам больше контроля над вашим ответом. Например, если вы хотите добавить некоторые поля из других моделей или переименовать какое-либо поле в своем ответе, в сериализаторе будет очень легко.

0 голосов
/ 24 апреля 2020

Насколько я понимаю, тогда как метод Model.values ​​(). Get () преобразует всю вашу модель и все поля атрибутов в dict, с помощью пользовательского сериализатора вы можете указать, какие атрибуты вы хотите включить, а какие нет.

Модель пользователя с .values ​​(). Get ()

x = User.objects.values().get(id=1)

print(x)

#{'id': 1,
 #'password': #'fdwfekwjgwlgkkk4j2oi4t243t4=',
 #'last_login': datetime.datetime(2020, 4, 23, 17, 19, 28, 709800, tzinfo=<UTC>),
 #'is_superuser': True,
 #'username': 'weir.b',
 #'first_name': 'Bob',
 #'last_name': 'Weir',
 #'email': 'weir.bob@gd.com',
 #'is_staff': True,
 #'is_active': True,
 #'date_joined': datetime.datetime(2019, 11, 21, 15, 2, 20, 618498, tzinfo=<UTC>),
 #'department': 'asdfsdf'}

Сравнение с выходом сериализатора

class UserSerializer(serializers.Serializer):
    username = serializers.CharField(max_length=255)
    department = serializers.CharField(max_length=100)

s = UserSerializer(x)
print(s.data)

#{'username': 'weir.b', 'department': 'asdfsdf'}

Сериализаторы предназначены для предоставления информации о модели API. клиент, тогда как объекты Model являются истинным представлением данных в базе данных. С помощью сериализатора вы также можете переопределить и добавить пользовательские методы, например validate ().

...