невозможно отобразить связь внешнего ключа в Django rest framework

#django #django-rest-framework

#django #django-rest-framework

Вопрос:

У меня есть модельный проект, задачи, и в проекте много задач, я пытаюсь перечислить все задачи в рамках каждого проекта.

 GET /api/project/ 

HTTP 200 OK
Allow: GET, POST, HEAD, OPTIONS
Content-Type: application/json
Vary: Accept

[
    {
        "id": 2,
        "name": "Project 2",
        "task": [
            3
        ]
    },
    {
        "id": 1,
        "name": "Project 1",
        "task": [
            4,
            2,
            1
        ]
    }
]
  

Я не могу отобразить подробную информацию о каждой задаче, имени задачи, описании, статусе .. и т. Д

Вот мой сериализатор

 from rest_framework.serializers import ModelSerializer
from api.models import Project, Task


class ProjectSerializer(ModelSerializer):
    class Meta:
        model = Project
        fields = (
            'id',
            'name',
            'task'
            )


class TaskSerializer(ModelSerializer):

    class Meta:
        model = Task
  

Вот моя модель

 class Project(models.Model):

    # Fields
    user = models.ForeignKey(User)
    name = models.CharField(max_length=255)

    # Relationship Fields
    #user = models.ForeignKey(settings.AUTH_USER_MODEL, )
    user = models.ForeignKey(User)

    class Meta:
        ordering = ('-created',)

    def __unicode__(self):
        return u'%s' % self.name


class Task(models.Model):

    # Fields
    name = models.CharField(max_length=255)

    # Relationship Fields
    project = models.ForeignKey('Project', related_name='task' )

    class Meta:
        ordering = ('-created',)

    def __unicode__(self):
        return u'%s' % self.name
  

Ответ №1:

Подробнее о вложенных сериализаторах http://www.django-rest-framework.org/api-guide/serializers/#dealing-with-nested-objects . Вам нужно добавить TaskSerilizer в свой ProjectSerializer

 from rest_framework.serializers import ModelSerializer
from api.models import Project, Task

class TaskSerializer(ModelSerializer): 
    class Meta:
        model = Task

class ProjectSerializer(ModelSerializer):
    task = TaskSerializer(many=True)

    class Meta:
        model = Project
        fields = (
            'id',
            'name',
            'task'
        )