2017-03-17 69 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

相关问题