【问题标题】:Django Rest Framework: Partial update (PATCH) and Foreign KeysDjango Rest Framework:部分更新(PATCH)和外键
【发布时间】:2017-04-14 14:57:56
【问题描述】:

我有两个 Django 模型(简化):

class Author(models.Model):
    name = models.CharField()

class Book(models.Model):
    author = models.ForeignKey(Author)
    title = models.CharField()

对于这两个模型,我都使用基本的 ModelSerializer:

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 对象的关系完整并仅更新标题来处理此问题。

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

【问题讨论】:

    标签: foreign-keys django-rest-framework


    【解决方案1】:

    “作者”是必填字段,您没有在更新中提供。

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

    【讨论】:

    • 那么你的代码中可能有一些东西或者你没有粘贴的东西会阻止这种情况发生。我不记得我在使用补丁时见过这个。
    • 你是对的。事实证明,我编写的视图混合中有一个错误。
    猜你喜欢
    • 2017-08-15
    • 2016-01-09
    • 1970-01-01
    • 2017-04-27
    • 2020-04-12
    • 2013-10-24
    • 2014-03-24
    • 2019-07-02
    • 2020-08-29
    相关资源
    最近更新 更多