在序列化程序Django:Rest框架中获取外键关系的数据

在序列化程序Django:Rest框架中获取外键关系的数据,django,django-rest-framework,Django,Django Rest Framework,我有以下型号 class Task(models.Model): task_name = models.CharField(max_length=255) task_description = models.TextField(blank=True, null=True) project_id = models.ForeignKey('Project') class Project(models.Model): project_name = models.C

我有以下型号

class Task(models.Model):
    task_name = models.CharField(max_length=255)
    task_description = models.TextField(blank=True, null=True)
    project_id = models.ForeignKey('Project')



class Project(models.Model):
    project_name = models.CharField(max_length=255)
    project_description = models.CharField(max_length=255)
我正在为这个任务编写一个序列化程序

class TaskSerializer(serializers.ModelSerializer):

    class Meta:
        model = Task
        fields = (
            'id',
            'task_name',
            'task_description',
            'project_id',
                 )

但是我希望项目名称也在TaskSerializer中,可以使用项目id访问它。我如何实现这一点

project\u id
字段指定一个序列化程序,例如您可能有一个
ProjectSerializer
,它是一个非常基本的modelserializer。这样使用:

 class ProjectSerializer(serializers.ModelSerializer):

    class Meta:
        model = Project
        fields = ('project_name', )

class TaskSerializer(serializers.ModelSerializer):
    project_id = ProjectSerializer()

    class Meta:
        model = Task
        fields = (
            'id',
            'task_name',
            'task_description',
            'project_id')

还可能需要注意的是:在命名foreignkey关系时,通常最好使用realted模型名,而不是其他名称
project\u id
在这种情况下会变成
project

project\u id
字段指定一个序列化程序,例如您可能有一个
ProjectSerializer
,它是一个非常基本的modelserializer。这样使用:

 class ProjectSerializer(serializers.ModelSerializer):

    class Meta:
        model = Project
        fields = ('project_name', )

class TaskSerializer(serializers.ModelSerializer):
    project_id = ProjectSerializer()

    class Meta:
        model = Task
        fields = (
            'id',
            'task_name',
            'task_description',
            'project_id')

还可能需要注意的是:在命名foreignkey关系时,通常最好使用realted模型名,而不是其他名称
project\u id
在这种情况下会变成
project

这给了我一个没有为任务对象错误定义的项目名称。我希望在响应中同时包含ID和名称!在这种情况下,你会得到一个嵌套的响应。Ie您必须通过task.project\u id.project\u name访问name。要在响应中添加项目id,只需修改ProjectSerializer。这会为我提供一个未为任务对象错误定义的项目名称。我希望在响应中同时包含ID和名称!在这种情况下,你会得到一个嵌套的响应。Ie您必须通过task.project\u id.project\u name访问name。要在响应中添加项目id,只需修改projectserializer