Saltar al contenido

Django REST Framework: agregar un campo adicional a ModelSerializer

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)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *