我有两个Django模型(简化):
class Author(models.Model):
name = models.CharField()
class Book(models.Model):
author = models.ForeignKey(Author)
title = models.CharField()
对于这两个型号,我使用基本的ModelSerializers:
class AuthorSerializer(serializers.ModelSerializer):
class Meta:
model = models.Author
fields = '__all__'
[similar code for BookSerializer]
最后,我已经实现了基本的ModelViewSets:
class AuthorViewSet(viewsets.ModelViewSet):
queryset = models.Author.objects.all()
serializer_class = serializers.AuthorSerializer
[similar code for BookViewSet]
现在,我部分更新了现有的图书,遗漏了“作者”,因为它不应该更改。
PATCH /api/v1/book/1/
JSON data: {'title': 'Lord of the Flies'}
我收到此错误:
HTTP 400 Bad Request
Allow: GET, PUT, PATCH, DELETE, OPTIONS
Content-Type: application/json
Vary: Accept
{
"author": [
"This field is required."
]
}
我认为这与“作者”这一事实有关。是一个FK。然而,我希望DRF能够通过保持Book对象的关系完整并只更新标题来处理这个问题。
我无法在文档或网络上的其他地方找到任何相关信息。我一定错过了什么?
答案 0 :(得分:0)
“author”是必填字段,您未在更新中提供。
使用PATCH HTTP动词绕过该约束或将作者设置为required=False
。