我們正在創建一個需要允許用戶更新記錄的API。在許多情況下,如狀態更新或名稱更改,只有一個字段會更改。對於PATCH請求,這似乎是一個合適的用例場景。據我所知,這是一個'部分'更新。Django REST Framework PATCH在所需字段上失敗
我們已經實現了Django的REST框架並且遇到了這個問題。對於諸如「AccountUser」的記錄,我只想更改名稱字段,因此我發送以下請求: PATCH/api/users/1/HTTP/1.1 主機:localhost X-CSRFToken:111122223333444455556666 Content-Type :應用/ JSON;字符集= UTF-8 緩存控制:無緩存
{ "fullname": "John Doe" }
記錄顯然有其它屬性,包括一對夫婦的「相關」字段,例如這是需要一個新的「帳戶」記錄。提交請求時,響應爲以下正文400錯誤: {「account」:[「此字段是必需的。」 ]} 用戶的串行看起來是這樣的:
class AccountUserSerializer(serializers.ModelSerializer):
account = serializers.PrimaryKeyRelatedField()
class Meta:
model = AccountUser
fields = ('id', 'account', 'fullname', ...)
depth = 1
和模型是這樣的:
class AccountUser(models.Model):
''' Account User'''
fullname = models.CharField(max_length=200,
null=True,blank=True)
account = models.ForeignKey(Account,
on_delete=models.PROTECT
)
objects = AccountUserManager()
def __unicode__(self):
return self.email
class Meta:
db_table = 'accounts_account_user'
上午我在這裏做得不對或者是錯誤的,希望能夠更新這種方式在記錄上的單個字段。謝謝!這個社區很棒!
編輯: 請求 - AccountUserManager:
class AccountUserManager(BaseUserManager):
def create_user(self, email, account_name):
username = hash_email_into_username(email)
...
account = Account.objects.get(name=account_name)
account_user = AccountUser(email=email,user=user,account=account)
account_user.save()
return account_user
嘗試添加'related_name ='account'',..' –
這隻能對'Account'模型反向查找。 –
能你發佈了'AccountUserManager'?我猜測問題是管理員沒有在'pk = 1'返回對象,所以你的補丁調用(調用'partial_update')認爲它需要創建一個新的實例。 –