2016-12-15 52 views
0

我有問題使用django-rest-framework ModelViewset create(self, request)方法從請求中獲取對象數據。DRF:TypeError:<Model:Model對象>不是JSON可序列化

這是我model.py

class Heat(models.Model): 

    # Relationship Fields 
    animal = models.ForeignKey(
        Animal, related_name='heats', 
        on_delete=models.CASCADE 
      ) 

    # Fields 
    performer = models.CharField(max_length=25) 
    is_bred = models.BooleanField(default=False) 
    note = models.TextField(max_length=250, blank=True, null=True) 

這是我serializers.py

class HeatSerializer(serializers.ModelSerializer): 

    class Meta: 
     model = Heat 
     fields = [ 
      'id', 
      'animal', 
      'performer', 
      'is_bred', 
      'note', 
     ] 

這裏是我們可以找到自己ModelViewset錯誤:

class HeatViewSet(viewsets.ModelViewSet): 
    queryset = Heat.objects.all() 
    serializer_class = HeatSerializer 

    @transaction.atomic 
    def create(self, request): 
     serializer = self.serializer_class(data=request.data) 

     if serializer.is_valid(): 
      print serializer.validated_data['animal'] 

如果你看看在這行代碼:

// this purpose is to print the actual value of an animal object 
// but it gave me the TypeError: <Animal: Animal object> is not JSON serializable. 
print serializer.validated_data['animal'] 

如果我們有這樣一個能正常工作,因爲這只是一個正常的字段一樣真正到了其他領域,除了這是一個關係場的動物:

print serializer.validated_data['performer'] 

現在,當我做到這一點,對象被直接保存到數據庫中。

serializer.save() 

不過在Django會提示我的SAME類型的錯誤!

當刪除整個create(self, request)該方法流程運行良好沒有錯誤,但我想在create(self, request)!執行許多查詢!這不會做得對,請幫助!

+0

你需要寫一個串行的'Animal'類,並把它添加到''HeatSerializer。 –

+0

我在'HeatSerializer'中做了'animal = AnimalSerializer'仍然不能工作 –

+0

就像那樣? 'animal = AnimalSerializer(source ='animal_set',many = True,read_only = True)' –

回答

0

當您序列上的查詢集的JSON結果將是成。數據對象

animal = AnimalSerializer(your_model.animal_set(), many=True, read_only=True) 
return Response(animal.data) 
相關問題