ジャンゴレストフレームワーク:シリアライザーの力( 1 )
2874 ワード
Water has been taken for granted. - Jan Eliasson
DRFのシリアライザーは、殺害機能であることが証明されました.
ここでは、シリアライザーを使用して逆の関係オブジェクトを更新しながら、外部キーオブジェクトデータを更新する詳細を共有します.
ここでのポイントは、通常、読み取り操作のためにシリアライザーで外部キーフィールドを使用している間、操作を書くためにそれらを使用することもできます.
FKオブジェクトデータを更新する
シナリオを考えましょう.
ここで我々は、ローンのアプリケーションを提出することができますアカウントがあります.アプリケーションを承認しながら、我々は
approved_amount
and reason
.class Account(models.Model):
account_number = models.CharField(max_length=255)
approved_amount = models.PositiveIntegerField(default=0)
reason = models.CharField(max_length=255, null=True, blank=True)
def __str__(self):
return self.account_number
class LoanApplication(models.Model):
class Status(models.TextChoices):
SUBMITTED = 'SUBMITTED', 'Submitted',
REJECTED = 'REJECTED', 'Rejected'
APPROVED = 'APPROVED', 'Approved'
account = models.ForeignKey(Account, on_delete=models.CASCADE)
status = models.CharField(
max_length=255, choices=Status.choices, default=Status.SUBMITTED)
def __str__(self):
return str(self.account)
上記の要件は1つのAPI呼び出しだけを使用しなければなりません.上記のコードショットに示すように、我々は
approved_amount
and reason
にAccount
モデルは、承認をしますLoanApplication
オブジェクト.Serializerが上記の問題に取り組む方法を見ましょう.
以下のショットのように、承認中に、我々は同じAPIで量と理由を収集します.シリアライズでは
LoanApplication
, 我々は分離するAccount
データと適切なアカウントに更新し、ローンのアプリケーションを更新するに進みます.class AccountSerializer(serializers.ModelSerializer):
class Meta:
model = Account
fields = '__all__'
class LoanApplicationSerializer(serializers.ModelSerializer):
approved_amount = serializers.IntegerField(
source='account.approved_amount')
reason = serializers.CharField(source='account.reason')
class Meta:
model = LoanApplication
exclude = ('account',)
def update(self, instance, validated_data):
account_data = validated_data.pop('account', None)
if account_data:
account_serializer = AccountSerializer(
instance.account, data=account_data, partial=True)
account_serializer.is_valid(raise_exception=True)
account_serializer.save()
return super().update(instance, validated_data)
リンク
Reference
この問題について(ジャンゴレストフレームワーク:シリアライザーの力( 1 )), 我々は、より多くの情報をここで見つけました https://dev.to/aravindas4/django-rest-framework-the-powers-of-a-serializer-1-1igjテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol