我想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)
感谢您的帮助!
答案 0 :(得分:0)
这不是问题,而是预期的行为。 Django不知道应该将没有默认值的字段设置为什么。要么给它一个默认值,要么在其上设置blank=True, null=True
。