如何在django-rest-framework中加入两个模型

Mun*_*oor 10 django django-rest-framework

假设我有两种型号:

level:

id
file_number
status


level_process:

process_ptr_id
level_id
Run Code Online (Sandbox Code Playgroud)

我想结合我上面的两个表,使用django-rest-framework在一个API中显示它.我正在寻找互联网上的例子,我找不到它...顺便说一下我使用的方式 python 2.7 , django 1.10.5 and djangorestframework 3.6.2

serializer.py

class LevelSerializer(serializers.HyperlinkedModelSerializer):
    id = serializers.ReadOnlyField()
    class Meta:
        model = Level
        fields = ('__all__')

class LevelProcessSerializer(serializers.ModelSerializer):
    level = LevelSerializer(read_only=True)

    class Meta:
        model = LevelProcess
        fields = ('__all__')

views.py

class ViewLevelProcessViewSet(viewsets.ModelViewSet):
    processes = LevelProcess.objects.all()
    serializer_class = LevelProcessSerializer(processes, many=True)
Run Code Online (Sandbox Code Playgroud)

Jah*_*nov 12

请尝试以下方法.为您的Level模型创建序列化程序:

class LevelSerializer(serializers.ModelSerializer):
    class Meta:
        model = Level
Run Code Online (Sandbox Code Playgroud)

然后,在里面LevelProcessSerializer,包括LevelSerializer这样:

class LevelProcessSerializer(serializers.ModelSerializer):
    level = LevelSerializer(read_only=True)

    class Meta:
        model = LevelProcess
Run Code Online (Sandbox Code Playgroud)

在ModelViewset中的用法:

class ViewLevelProcessViewSet(viewsets.ModelViewSet):
    queryset = LevelProcess.objects.all() 
    serializer_class = LevelProcessSerializer
Run Code Online (Sandbox Code Playgroud)

这样,你的json看起来像这样:

{
   "id": 1,
   "level": {
      "id": 3,
      "status": "red"
   }
}
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助!