小编gkl*_*gkl的帖子

Django REST Framework PATCH在必填字段上失败

我们正在创建一个需要允许用户更新记录的API.在许多情况下,如状态更新或名称更改,只会更改一个字段.这似乎是PATCH请求的合适用例场景.据我了解,这是一个"部分"更新.

我们已经实现了Django的REST框架并遇到了这个问题.对于诸如"AccountUser"之类的记录,我只想更改名称字段,因此我发送以下请求:PATCH/api/users/1/HTTP/1.1主机:localhost X-CSRFToken:111122223333444455556666内容类型:application/json ; charset = UTF-8 Cache-Control:无缓存

{ "fullname": "John Doe" }
Run Code Online (Sandbox Code Playgroud)

该记录显然还有其他属性,包括一些"相关"字段,例如新帐户所需的"帐户"字段.提交请求时,以下正文的响应为400错误:{"account":["此字段为必填项." 用户的序列化程序如下所示:

class AccountUserSerializer(serializers.ModelSerializer):
    account = serializers.PrimaryKeyRelatedField()

class Meta:
    model = AccountUser
    fields = ('id', 'account', 'fullname', ... )
    depth = 1
Run Code Online (Sandbox Code Playgroud)

模型看起来像这样:

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'
Run Code Online (Sandbox Code Playgroud)

我在这里做错了什么,或者期望能够以这种方式更新记录中的单个字段是错误的.谢谢!这社区摇滚!

编辑:请求 - 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 …
Run Code Online (Sandbox Code Playgroud)

python django rest django-rest-framework

7
推荐指数
1
解决办法
3140
查看次数

标签 统计

django ×1

django-rest-framework ×1

python ×1

rest ×1