MethodField -> SerializerMethodField

This commit is contained in:
Tom Christie 2014-09-12 09:12:56 +01:00
parent 1e53eb0aa2
commit adcb64ab41
4 changed files with 14 additions and 15 deletions

View File

@ -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)

View File

@ -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:

View File

@ -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

View File

@ -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'