update tutorial queryset framework example espaƱol errors create json django django-models django-rest-framework django-serializer

json - tutorial - Django: serializadores de anidamiento entre ellos



partial update django rest framework (2)

Debe agregar un modelo que contenga columns y atributos de data porque actualmente no están vinculados.

su archivo models.py :

class Table(models.Model): pass class Column(models.Model): data = models.CharField(max_length=200) title = models.CharField(max_length=200) table = models.ForeignKey(Table) def __str__(self): return self.order class Line(models.Model): doc = models.CharField(max_length=200) order = models.CharField(max_length=200) nothing = models.CharField(max_length=200) table = models.ForeignKey(Table) def __str__(self): return self.order

su archivo serializer.py :

# import your related models and serializers class ColumnSerializer(serializers.ModelSerializer): class Meta: model = Column fields = [ ''data'', ''title'' ] class LineSerializer(serializers.ModelSerializer): class Meta: model = Line fields = [ ''doc'', ''order'', ''nothing'' ] class TableSerializer(serializers.ModelSerializer): columns = ColumnSerializer(many=True) lines = LineSerializer(many=True) class Meta: model = Table fields = [ ''columns'', ''lines'' ]

Ahora use el serializador TableSerializer para serializar y deserializar su objeto Table .

Con respecto a sus modelos, Line lugar de Data es quizás más apropiado. Y

Lea Django-Rest-Framework - NestedRelationships para obtener más información y aprenda cómo admitir las operaciones de escritura en un campo de serializador anidado.

Estoy averiguando cómo los serializadores se pueden fusionar o anidar el uno al otro. En este ejemplo, tengo un modelo de columna (que consiste en una clase de Column ) y datos que pertenecen al modelo de columna (que consiste en Data class de Data class ). Mi problema es que no sé cómo llamar a ModelSerializer desde otra clase de serializador y pasar los argumentos (el resultado siempre está vacío).

¿Puede aconsejarme si mi modelo es correcto para esta situación y cómo crear el JSON deseado para que el resultado reutilice los serializadores existentes y evite la duplicación de datos?

Nota: en el mejor de los casos, los atributos de los datos deben ser dependientes entre sí, de modo que solo esos datos se serialicen y se definan como columnas.

models.py

class Column(models.Model): data = models.CharField(max_length=200) title = models.CharField(max_length=200) def __str__(self): return self.order class Data(models.Model): doc = models.CharField(max_length=200) order = models.CharField(max_length=200) nothing = models.CharField(max_length=200) def __str__(self): return self.order

Salida deseada:

{ "columns": [ { "data": "doc", "title": "Doc." }, { "data": "order", "title": "Order no." }, { "data": "nothing", "title": "Nothing" } ], "data": [ { "doc": "564251422", "nothing": 0.0, "order": "56421" }, { "doc": "546546545", "nothing": 0.0, "order": "98745" } ] }

Pero el resultado con ModelSerializer es así:

[ { "doc": "564251422", "order": "56421", "nothing": "0.0" }, { "doc": "546546545", "order": "98745", "nothing": "0.0" } ]


Primero necesitas modificar tus modelos. Puede hacer data campo ForeignKey data en el modelo de Column similar a:

class Column(models.Model): data = models.ForeignKey("Data") title = models.CharField(max_length=200)

Luego crea un nuevo serializador para Data como:

class DataSerializer(serializers.ModelSerializer): class Meta: model = Data

Ahora puede usar DataSerializer en ColumnSerializer para obtener datos para cada columna como:

class ColumnSerializer(serializers.ModelSerializer): data = DataSerializer(read_only=True) class Meta: model = Column

Esto daría salida como:

[ { "title" : "Doc", "data" :{ "doc": "564251422", "nothing": 0.0, "order": "56421" } }, { "title" : "Order no.", "data" :{ "doc": "546546545", "nothing": 0.0, "order": "98745" } } ]