Return Related Model fields in JSON - DjangoRestFramework

0

I need to be able to access the values of the fields related to a certain model.

I have the following in my activity / models.py

    from django.db import models
from metodologia.models import Metodologia
from competencia.models import Competencia
from resultado_aprendizaje.models import Resultado_aprendizaje
from django.contrib.auth.models import User
from nivel.models import Nivel
# Create your models here.

class Actividad(models.Model):
    nombre = models.CharField(max_length=100)
    objetivo = models.TextField(null=True, blank=True)
    descripcion = models.TextField(null=True, blank=True)
    entrega = models.TextField(null=True, blank=True)
    fecha = models.DateField(blank=True, null=True)
    aprobado = models.BooleanField(default=False)
    en_revision = models.BooleanField(default=True)
    hecho = models.BooleanField(default=False)
    documento_adjunto = models.FilePathField(blank=True, null=True)#para adjuntar documento que contiene la planificacion detallada

    metodologia = models.ForeignKey(Metodologia, on_delete=models.SET_NULL, blank=True, null=True)

    timestamp = models.DateTimeField(auto_now_add=True, auto_now=False, null=True)
    lastModification = models.DateTimeField(auto_now_add=False, auto_now=True, null=True)
    def __str__(self):
        return self.nombre

    def __unicode__(self):
        return self.nombre


class CompetenciaPropuesta(models.Model):
    competencia = models.ForeignKey(Competencia, on_delete=models.SET_NULL, null=True)
    actividad = models.ForeignKey(Actividad, related_name='competenciaspropuestas' ,on_delete=models.SET_NULL, null=True)
    nivel = models.ForeignKey(Nivel, on_delete=models.SET_NULL, blank=True, null=True)

    timestamp = models.DateTimeField(auto_now_add=True, auto_now=False, null=True)
    lastModification = models.DateTimeField(auto_now_add=False, auto_now=True, null=True)
    def __str__(self):
        return '%s: %s' % (self.competencia.nombre, self.nivel.valor)

    def __unicode__(self):
        return '%s: %s' % (self.competencia.nombre, self.nivel.valor)


class Resultado_aprendizajePropuesto(models.Model):
    resultado_aprendizaje = models.ForeignKey(Resultado_aprendizaje, on_delete=models.SET_NULL, blank=True, null=True)
    actividad = models.ForeignKey(Actividad, related_name='resultadosaprendizajespropuestos' ,on_delete=models.SET_NULL, null=True)
    nivel = models.ForeignKey(Nivel, on_delete=models.SET_NULL, blank=True, null=True)

    timestamp = models.DateTimeField(auto_now_add=True, auto_now=False, null=True)
    lastModification = models.DateTimeField(auto_now_add=False, auto_now=True, null=True)
    def __str__(self):
        return '%s: %s' % (self.resultado_aprendizaje.nombre, self.nivel.valor)


    def __unicode__(self):
        return '%s: %s' % (self.resultado_aprendizaje.nombre, self.nivel.valor)

The model "CompetenciaPropuesta" is related to my competition / models.py

    from django.db import models
from curso.models import Curso
from categoria.models import Categoria

# Create your models here.

class Competencia(models.Model):
    nombre = models.CharField(max_length=100)
    descripcion = models.TextField(null=True, blank=True)
    categoria = models.ForeignKey(Categoria, on_delete=models.SET_NULL, null=True)
    cursos = models.ForeignKey(Curso, on_delete=models.SET_NULL, null=True, blank=True)

    timestamp = models.DateTimeField(auto_now_add=True, auto_now=False, null=True)
    lastModification = models.DateTimeField(auto_now_add=False, auto_now=True, null=True)
    def __str__(self):
        return self.nombre

    def __unicode__(self):
        return self.nombre

And the Model "Proposed Learning Result" is related to my learning_product / models.py

from django.db import models

# Create your models here.

class Resultado_aprendizaje(models.Model):
    nombre = models.CharField(max_length=100)
    descripcion = models.TextField(null=True, blank=True)


    timestamp = models.DateTimeField(auto_now_add=True, auto_now=False, null=True)
    lastModification = models.DateTimeField(auto_now_add=False, auto_now=True, null=True)
    def __str__(self):
        return self.nombre

    def __unicode__(self):
        return self.nombre

Now, each model is serialized in the following way:

from rest_framework import serializers
from .models import *
from metodologia.serializers import MetodologiaSerializer
from competencia.serializers import CompetenciaSerializer

class CompetenciaPropuestaSerializer(serializers.ModelSerializer):
    class Meta:
        model = CompetenciaPropuesta
        fields = ('id','competencia', 'actividad', 'nivel', 'timestamp', 'lastModification', )


class Resultado_aprendizajePropuestoSerializer(serializers.ModelSerializer):
    class Meta:
        model = Resultado_aprendizajePropuesto
        fields = '__all__'


class ComentarioSerializer(serializers.ModelSerializer):
    class Meta:
        model = Comentario
        fields = '__all__'

class ActividadSerializer(serializers.ModelSerializer):
    metodologia = MetodologiaSerializer(many=False, read_only=False)
    competenciaspropuestas = serializers.StringRelatedField(many=True, read_only=False)
    resultadosaprendizajespropuestos = serializers.StringRelatedField(many=True, read_only=False)
    class Meta:
        model = Actividad
        fields = ('id','nombre', 'objetivo', 'descripcion', 'entrega', 'fecha', 'aprobado', 'en_revision', 'hecho', 'documento_adjunto', 'metodologia', 'competenciaspropuestas', 'resultadosaprendizajespropuestos' , 'timestamp', 'lastModification', )

The problem is that I need to get the instances related to my activity in JSON, but my activity JSON returns a string of the instance corresponding to the model "CompetenceProposal" and "Results_Programming".

My JSON is as follows:

[{"id":2,"nombre":"¿Qué es la Dirección de Proyectos?","objetivo":"","descripcion":"Ver video de lo que es la dirección de proyectos.\r\n\r\nLink del video: https://www.youtube.com/watch?v=MlyrriEzx3o","entrega":"","fecha":"2018-10-24","aprobado":false,"en_revision":true,"hecho":false,"documento_adjunto":"","metodologia":{"id":2,"nombre":"Tradicional","descripcion":"sin definir","timestamp":"2018-10-08T18:16:58.020307Z","lastModification":"2018-10-08T18:16:58.020307Z"},"competenciaspropuestas":["Éxito en la Dirección de Proyectos: 1","Cambios: 2"],"resultadosaprendizajespropuestos":["Formular y evaluar proyectos de tecnologías de información: Básico"],"timestamp":"2018-10-08T18:56:43.729047Z","lastModification":"2018-10-25T18:25:57.419596Z"},{"id":3,"nombre":"EDT","objetivo":"Comprender y aplicar la herramienta EDT en un proyecto simple","descripcion":"Realizar EDT del desarrollo de una app móvil para hacer compras de artículos gamer PC","entrega":"En papel, durante la clase - 20 minutos para desarrollarlo","fecha":"2018-12-28","aprobado":true,"en_revision":false,"hecho":false,"documento_adjunto":"","metodologia":{"id":2,"nombre":"Tradicional","descripcion":"sin definir","timestamp":"2018-10-08T18:16:58.020307Z","lastModification":"2018-10-08T18:16:58.020307Z"},"competenciaspropuestas":["Estructuras de proyectos: 4","Alcance y entregables: 4","Tiempo y fases de los proyectos: 4"],"resultadosaprendizajespropuestos":["Administrar y gestionar proyectos informáticos: Avanzado"],"timestamp":"2018-10-23T15:10:47.497599Z","lastModification":"2018-10-23T15:10:47.497599Z"}]

So from the Frontend I can not easily access the level and name fields of each model, since it returns a string of characters.

Thanks for the help ...

    
asked by Oscar Acevedo Osses 26.10.2018 в 17:14
source

0 answers