ユーザーがレコードを更新できるようにするためのAPIを作成しています。多くの場合、ステータスの更新や名前の変更のように、1つのフィールドだけが変更されます。これは、PATCH要求に対する適切なユースケースのシナリオと思われます。私が理解しているように、これは部分的な更新です。Django REST Framework PATCHが必須フィールドで失敗する
私たちはDjangoのRESTフレームワークを実装し、この問題に取り組んでいます。 「AccountUser」などのレコードの場合は、名前欄のみを変更したいので、次のリクエストを送信します。 PATCH/api/users/1/HTTP/1.1 ホスト:localhost X-CSRFToken:111122223333444455556666 コンテンツタイプ:アプリケーション/ JSON;のcharset = UTF-8 のCache-Control:キャッシュなし
{ "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'
私はここで間違って何かをやっているか、それを更新できることを期待することが間違っていますこのようにレコードの1つのフィールド。ありがとう!このコミュニティは揺れる!
EDIT: が要求 - 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
てみてください= 'account''を見ることができます。.. ' –
を' Account'モデルの逆引き参照のためにのみだこと。 –
ができあなたはあなたの 'AccountUserManager'を投稿していますか?マネージャは' pk = 1'でオブジェクトを返さないので、パッチコール( 'partial_update'を呼び出します)は新しいインスタンスを作成する必要があると考えます。 –