我们正在创建一个需要允许用户更新记录的 API。在许多情况下,例如状态更新或名称更改,只有一个字段会更改。对于 PATCH 请求,这似乎是一个合适的用例场景。据我了解,这是一个“部分”更新。
我们已经实现了 Django 的 REST 框架并遇到了这个问题。对于诸如“AccountUser”之类的记录,我只想更改名称字段,因此我发送以下请求:PATCH /api/users/1/ HTTP/1.1 Host: localhost X-CSRFToken: 111122223333444455556666 Content-Type: application/json ;charset=UTF-8 缓存控制:无缓存
{ "fullname": "John Doe" }
该记录显然具有其他属性,包括几个“相关”字段,例如新记录所需的“帐户”。提交请求时,响应为 400 错误,正文如下: { "account": [ "This field is required." ] } 用户的序列化程序如下所示:
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