Django rest-PUT要求非指定字段的默认值= Bug?

时间:2016-12-14 02:01:02

标签: django django-rest-framework

目标:

我想PUT一个特定的字段来更新id = 22的现有条目。我不想在我的请求中传递无法更新的字段。

{"color":"green"}

到端点:

/api/apple/22

最初的数据:

{
    "id": 22, 
    "color": "red", 
    "size": 4
}

问题:

没有默认值的字段会引发错误,例如size,说"此字段是必填项。"

代码:

模型

class Apples(TimeStampedModel):
    color = models.CharField(blank=True, null=True)
    size = models.IntegerField()

串行

class AppleSerializer(serializers.ModelSerializer):
    class Meta:
        model = Apple
        fields = '__all__'

查看

class AppleView(generics.RetrieveUpdateDestroyAPIView):
    queryset = Apple.objects.all()
    serializer_class = AppleSerializer
    filter_backends = (filters.DjangoFilterBackend,)
    permission_classes = (IsAdminUser,)

测试

def test_update_apple(self):
    url = reverse('apple-detail', kwargs={'pk': 22})
    data = {"color": "green"}
    admin = User.objects.get(username='admin')
    client = APIClient()
    client.force_authenticate(user=admin)
    response = client.put(url, data, format='json')
    self.assertEqual(response.status_code, status.HTTP_200_OK)

感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

这不是问题,而是预期的行为。 Django不知道应该将没有默认值的字段设置为什么。要么给它一个默认值,要么在其上设置blank=True, null=True

相关问题