Solución:
Creo que SerializerMethodField es lo que estás buscando:
class FooSerializer(serializers.ModelSerializer):
my_field = serializers.SerializerMethodField('is_named_bar')
def is_named_bar(self, foo):
return foo.name == "bar"
class Meta:
model = Foo
fields = ('id', 'name', 'my_field')
http://www.django-rest-framework.org/api-guide/fields/#serializermethodfield
Puede cambiar el método de su modelo a propiedad y usarlo en el serializador con este enfoque.
class Foo(models.Model):
. . .
@property
def my_field(self):
return stuff
. . .
class FooSerializer(ModelSerializer):
my_field = serializers.ReadOnlyField(source="my_field")
class Meta:
model = Foo
fields = ('my_field',)
Editar: con las versiones recientes del marco de descanso (probé 3.3.3), no es necesario cambiar a la propiedad. El método modelo funcionará bien.
Con la última versión de Django Rest Framework, necesita crear un método en su modelo con el nombre del campo que desea agregar. No hay necesidad de @property
y source="field"
generar un error.
class Foo(models.Model):
. . .
def foo(self):
return 'stuff'
. . .
class FooSerializer(ModelSerializer):
foo = serializers.ReadOnlyField()
class Meta:
model = Foo
fields = ('foo',)
¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)