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
super(ReadOnlyField, self).__init__(**kwargs)
def to_native(self, data):
raise NotImplemented('.to_native() not supported.')
def to_primative(self, value):
if is_simple_callable(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
parent serializer class. The method called will be of the form
@ -787,22 +784,22 @@ class MethodField(Field):
For example:
class ExampleSerializer(self):
extra_info = MethodField()
extra_info = SerializerMethodField()
def get_extra_info(self, obj):
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['read_only'] = True
super(MethodField, self).__init__(**kwargs)
def to_native(self, data):
raise NotImplemented('.to_native() not supported.')
super(SerializerMethodField, self).__init__(**kwargs)
def to_primative(self, value):
attr = 'get_{field_name}'.format(field_name=self.field_name)
method = getattr(self.parent, attr)
method_attr = self.method_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)

View File

@ -598,7 +598,8 @@ class ModelSerializer(Serializer):
if isinstance(model_field, models.BooleanField):
# models.BooleanField has `blank=True`, but *is* actually
# 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)
if validator_kwarg:

View File

@ -1,6 +1,7 @@
"""
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 django.db import models

View File

@ -6,7 +6,7 @@
# def test_empty_serializer(self):
# class FooBarSerializer(serializers.Serializer):
# foo = serializers.IntegerField()
# bar = serializers.MethodField()
# bar = serializers.SerializerMethodField()
# def get_bar(self, obj):
# return 'bar'