2017-03-17 59 views
0

在視圖和模板中一切正常。當我做了序列化器,然後APIVIEW發生了錯誤的事情。 GET方法可以,但POST不是。當我嘗試添加的食物,我得到IntegrityError這樣的:(但在管理面板和圖形用戶界面,你可以與模型的問題必須與串行器添加的食用正常所以它不是問題)IntegrityError - 列不能爲空DJANGO

IntegrityError在/ food_list_serializer/

列 '大卡' 不能爲空

模型是這樣的:

class Food(models.Model): 
    name = models.CharField(max_length=124) 
    kcal = models.FloatField() 
    proteins = models.FloatField() 
    carbs = models.FloatField() 
    fats = models.FloatField() 
    grams = models.FloatField(default=100, validators=[MinValueValidator(1)]) 

串行器:

class FoodSerializer(serializers.ModelSerializer): 
    class Meta: 
     model = Food 
     fields = '__all__' 

瀏覽次數:

class FoodListSerializer(APIView): 
    def get(self, request, format=None): 
     food = Food.objects.all() 
     serializer = FoodSerializer(food, many=True, context={'request': request}) 
     return Response(serializer.data) 

    def post(self, request): 
     food_create = Food.objects.create() 
     serializer = FoodSerializer(food_create, data=request.data) 
     if serializer.is_valid(): 
      serializer.save() 
      return Response(serializer.data) 
     return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST) 

POST request in DJANGO rest framework looks like this

+0

發佈請求是什麼樣的?大卡是否被傳遞? –

回答

0

問題就出在這行:

food_create = Food.objects.create() 

你告訴Django的創建和數據庫保存Food對象零參數,然後實際分析POST數據。在Food模型中,您有很多所需的字段(其中之一是kcal字段)。刪除此行,因爲FoodSerializer將被「填充」爲request.dataPOST)值。

+0

感謝您的回答!但林非常確定,我在其他項目中得到了同樣的解決方案,它的工作原理。但我會盡力去做。再次感謝! – TTomasik

+0

它必須是它!您正在創建並保存一個沒有任何參數傳遞給對象的數據庫(並且「Food」字段沒有指定任何「默認」值)。 –

+0

我的歉意。你是對的:)謝謝! – TTomasik

相關問題