2016-10-06 27 views
1

は、私は次のモデル:休憩フレームワーク

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', 
       ) 

ためのシリアライザを書いていますが、私は、同様のプロジェクト名を欲しいがありますproject_idを使用してアクセスできるTaskSerializer内にあります。どのように私はこれを達成するのですか?

答えて

1

project_idフィールドのシリアライザを指定します。たとえば、非常に基本的なモデレータであるProjectSerializerがあります。そうのようなものを使用します。

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') 

も注目にworhtかもしれません:その一般的に良い練習をForeignKeyの関係に名前を付けるときだけrealtedモデル名の代わりに、別の何かで行くことに。 project_idはこの場合はprojectになります。 source: Working with models in django

+0

これは、タスクオブジェクトのエラーで定義されていないproject_nameを返します。 レスポンスにIDと名前の両方が必要です。 –

+0

この場合、ネストされた応答が得られます。つまり、task.project_id.project_nameで名前にアクセスする必要があります。レスポンスにプロジェクトIDを追加するには、プロジェクト・シリアライザを変更するだけです –

関連する問題