在序列化程序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