2016-11-30 116 views
0

我有兩個Django模型(簡體):Django的REST框架:部分更新(補丁)鍵和外鍵

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] 

最後,我VE實現基本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

「作者」是必填字段,你沒有在更新中提供。

既可以使用HTTP PATCH動詞繞過該約束或設置的作者作爲required=False

+0

我使用補丁,也就是那種點...... – Rik

+0

那麼你可能在你的代碼的東西,或者你沒有粘貼,防止這種情況發生。我不記得我在使用補丁時看到過這個。 – Linovia

+0

你說得對。事實證明,在我編寫的混合視圖中存在一個錯誤。 – Rik