Django Rest Framework:部分更新(PATCH)和外键

时间:2016-11-30 10:20:27

标签: foreign-keys django-rest-framework

我有两个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对象的关系完整并只更新标题来处理这个问题。

我无法在文档或网络上的其他地方找到任何相关信息。我一定错过了什么?

1 个答案:

答案 0 :(得分:0)

“author”是必填字段,您未在更新中提供。

使用PATCH HTTP动词绕过该约束或将作者设置为required=False