mirror of
https://github.com/encode/django-rest-framework.git
synced 2025-02-02 20:54:42 +03:00
MethodField -> SerializerMethodField
This commit is contained in:
parent
1e53eb0aa2
commit
adcb64ab41
|
@ -768,16 +768,13 @@ class ReadOnlyField(Field):
|
||||||
kwargs['read_only'] = True
|
kwargs['read_only'] = True
|
||||||
super(ReadOnlyField, self).__init__(**kwargs)
|
super(ReadOnlyField, self).__init__(**kwargs)
|
||||||
|
|
||||||
def to_native(self, data):
|
|
||||||
raise NotImplemented('.to_native() not supported.')
|
|
||||||
|
|
||||||
def to_primative(self, value):
|
def to_primative(self, value):
|
||||||
if is_simple_callable(value):
|
if is_simple_callable(value):
|
||||||
return value()
|
return value()
|
||||||
return value
|
return value
|
||||||
|
|
||||||
|
|
||||||
class MethodField(Field):
|
class SerializerMethodField(Field):
|
||||||
"""
|
"""
|
||||||
A read-only field that get its representation from calling a method on the
|
A read-only field that get its representation from calling a method on the
|
||||||
parent serializer class. The method called will be of the form
|
parent serializer class. The method called will be of the form
|
||||||
|
@ -787,22 +784,22 @@ class MethodField(Field):
|
||||||
For example:
|
For example:
|
||||||
|
|
||||||
class ExampleSerializer(self):
|
class ExampleSerializer(self):
|
||||||
extra_info = MethodField()
|
extra_info = SerializerMethodField()
|
||||||
|
|
||||||
def get_extra_info(self, obj):
|
def get_extra_info(self, obj):
|
||||||
return ... # Calculate some data to return.
|
return ... # Calculate some data to return.
|
||||||
"""
|
"""
|
||||||
def __init__(self, **kwargs):
|
def __init__(self, method_attr=None, **kwargs):
|
||||||
|
self.method_attr = method_attr
|
||||||
kwargs['source'] = '*'
|
kwargs['source'] = '*'
|
||||||
kwargs['read_only'] = True
|
kwargs['read_only'] = True
|
||||||
super(MethodField, self).__init__(**kwargs)
|
super(SerializerMethodField, self).__init__(**kwargs)
|
||||||
|
|
||||||
def to_native(self, data):
|
|
||||||
raise NotImplemented('.to_native() not supported.')
|
|
||||||
|
|
||||||
def to_primative(self, value):
|
def to_primative(self, value):
|
||||||
attr = 'get_{field_name}'.format(field_name=self.field_name)
|
method_attr = self.method_attr
|
||||||
method = getattr(self.parent, attr)
|
if method_attr is None:
|
||||||
|
method_attr = 'get_{field_name}'.format(field_name=self.field_name)
|
||||||
|
method = getattr(self.parent, method_attr)
|
||||||
return method(value)
|
return method(value)
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -598,7 +598,8 @@ class ModelSerializer(Serializer):
|
||||||
if isinstance(model_field, models.BooleanField):
|
if isinstance(model_field, models.BooleanField):
|
||||||
# models.BooleanField has `blank=True`, but *is* actually
|
# models.BooleanField has `blank=True`, but *is* actually
|
||||||
# required *unless* a default is provided.
|
# required *unless* a default is provided.
|
||||||
# Also note that <1.6 `default=False`, >=1.6 `default=None`.
|
# Also note that Django<1.6 uses `default=False` for
|
||||||
|
# models.BooleanField, but Django>=1.6 uses `default=None`.
|
||||||
kwargs.pop('required', None)
|
kwargs.pop('required', None)
|
||||||
|
|
||||||
if validator_kwarg:
|
if validator_kwarg:
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
"""
|
"""
|
||||||
Helper functions for returning the field information that is associated
|
Helper functions for returning the field information that is associated
|
||||||
with a model class.
|
with a model class. This includes returning all the forward and reverse
|
||||||
|
relationships and their associated metadata.
|
||||||
"""
|
"""
|
||||||
from collections import namedtuple
|
from collections import namedtuple
|
||||||
from django.db import models
|
from django.db import models
|
||||||
|
|
|
@ -6,7 +6,7 @@
|
||||||
# def test_empty_serializer(self):
|
# def test_empty_serializer(self):
|
||||||
# class FooBarSerializer(serializers.Serializer):
|
# class FooBarSerializer(serializers.Serializer):
|
||||||
# foo = serializers.IntegerField()
|
# foo = serializers.IntegerField()
|
||||||
# bar = serializers.MethodField()
|
# bar = serializers.SerializerMethodField()
|
||||||
|
|
||||||
# def get_bar(self, obj):
|
# def get_bar(self, obj):
|
||||||
# return 'bar'
|
# return 'bar'
|
||||||
|
|
Loading…
Reference in New Issue
Block a user