2016-03-22 16 views
0

私はdjango rest frameworkの初心者です。Django restの結合モデルからフィールドを追加する

私はモデルClientProjectです。私のプロジェクト/ビューで

class ProjectSerializer(CoreHyperlinkedModelSerializer): 
    class Meta: 
     model = Task 
     fields = ('url', 'id', 'name') 

:私のプロジェクト/シリアライザで

class Client(models.Model): 
    name = models.CharField(max_length=100) 


class Project(models.Model): 
    client = models.ForeignKey(Client) 
    name = models.CharField(max_length=100) 

私はそうProjectSerializerにクライアントの主キーを追加できるようにしたい

class ProjectViewSet(viewsets.ModelViewSet): 
    queryset = Project.objects.order_by('name').all() 
    serializer_class = ProjectSerializer 

作成APIブラウザの表示では、私は 新しいデータを追加することができます。

答えて

1

これはおそらく、あなたが物事をやるべき方法ではありませんが、ちょうど主キーを取得するには、PrimaryKeyRelatedFieldを使用することができます。

class ProjectSerializer(...): 
    client = serializers.PrimaryKeyRelatedField(queryset=Client.objects.all) 

    class Meta: 
     model = Project 
     fields = ('url', 'id', 'name', 'client',) 
1

プロジェクトシリアライザに追加する必要があります。フィールドに外部キーを追加すると、主キーが与えられます。

class ProjectSerializer(CoreHyperlinkedModelSerializer): 
    class Meta: 
     model = Task 
     fields = ('url', 'id', 'name', 'client',) 

また、プロジェクトシリアライザでクライアントビューを変更する場合は、ネストされたシリアライゼーションを使用できます。

class ProjectSerializer(CoreHyperlinkedModelSerializer): 
    client = serializers.SerializerMethodField() 

    def get_client(self, obj): 
     serializer = ClientSerializer(obj.client.objects.all()) 
     return serializer.data 

    class Meta: 
     model = Task 
     fields = ('url', 'id', 'name', 'client',) 
関連する問題