ユーザーがレコードを更新できるようにする必要がある API を作成しています。多くの場合、ステータスの更新や名前の変更など、変更されるフィールドは 1 つだけです。これは、PATCH リクエストの適切なユース ケース シナリオのようです。私が理解しているように、これは「部分的な」更新です。
Django の REST フレームワークを実装したところ、この問題が発生しました。「AccountUser」などのレコードの場合、名前フィールドのみを変更したいので、次のリクエストを送信します: PATCH /api/users/1/ HTTP/1.1 Host: localhost X-CSRFToken: 11112222333444455556666 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