2014-11-03 127 views
1

我已經將模型序列化爲具有外鍵的JSON。該API將顯示外鍵的標題,但不會嵌套屬於該外鍵的數據。我該怎麼做呢。Django Rest框架:如何顯示JSON中的外鍵內容

serializers.py

class ReportFieldSerializers(serializers.ModelSerializer): 
    form = serializers.RelatedField() 
    class Meta: 
     model = ReportField 
     fields = (
      'id', 
      'title', 
      'form' 
     ) 

api.py

class ReportFieldList(APIView): 
    def get(self, request, format=None): 
     report_field = ReportField.objects.all() 
     serialized_report_field = ReportFieldSerializers(report_field, many=True) 
     return Response(serialized_report_field.data) 

class ReportFieldDetail(APIView): 
    def get_object(self, pk): 
     try: 
      return ReportField.objects.get(pk=pk) 
     except ReportField.DoesNotExist: 
      raise Http404 

    def get(self, request, pk, format=None): 
     report_field = self.get_object(pk) 
     serialized_report_field = ReportFieldSerializers(report_field) 
     return Response(serialized_report_field.data) 

models.py

class Report(models.Model): 
    title = models.CharField() 
    form = models.ForeignKey() 

class Form(models.Model): 
    # Form details 
+0

您已經在serializers.py ReportField,但在你的models.py模型報告。你能否糾正一下,以反映你的實際代碼。 – cezar 2014-11-03 19:43:07

回答

1

有一個選項depth,可以在元類的使用串行器。例如:

class ReportFieldSerializers(serializers.ModelSerializer): 

    class Meta: 
     model = ReportField 
     fields = (
      'id', 
      'title', 
      'form' 
     ) 
     depth = 1 

這將在相關型號中下移一步。正如你所見,你不需要RelatedField。如果,比方說,將有第三個模型類,例如:

class Form(models.Model): 
    example = ForeignKey('AnotherModel') 

class AnotherModel(models.Model): 
    # model fields 

,你也可以使用depth=2ReportFieldSerializer顯示此模型的信息。

我假設在你的模型Report的字段form顯示爲Formmodels.ForeignKey(Form)

我已經回答了類似的問題在這裏: Django rest_framework serializer with inner relationship

+0

這幫了我。是否可以刪除外鍵的'id'字段?或者我看錯了方向?我是django的新手,我認爲它會在外部模型的序列化程序中隱藏'id'字段,如果從另一個對象中取出它,它也將被顯示。有沒有我失蹤的理由?它可能是用於訪問? – yev 2017-05-07 03:29:45