私はDjangoを3年以上使用してきましたが、DRFを使用する必要性を感じたことはありません。しかし、DRFの人気が高まっているのを見て、私はそれを試してみることを考えました。Django DRF - シリアライザの用途は何ですか?
をシリアライズするのが最も難しいと考えています。たとえば、次のように考えてみましょう。 - ユーザーの詳細を保存したい以下はユーザー関連のモデルです。
class Users(models.Model):
GENDER_CHOICES = (
('M', 'MALE'),
('F', 'FEMALE'),
('O', 'OTHERS'),
)
first_name = models.CharField(max_length=255, blank=True, null=True)
middle_name = models.CharField(max_length=255, blank=True, null=True)
last_name = models.CharField(max_length=255, blank=True, null=True)
gender = models.CharField(choices=GENDER_CHOICES, max_length=1, blank=True,
null=True)
class UserAddress(models.Model):
ADDRESS_TYPE_CHOICES = (
('P', 'Permanent'),
('Cu', 'Current'),
('Co', 'Correspondence')
)
line1 = models.CharField(max_length=255)
line2 = models.CharField(max_length=255, blank=True, null=True)
pincode = models.IntegerField()
address_type = models.CharField(choices=ADDRESS_TYPE_CHOICES,
max_length=255)
user_id = models.ForeignKey(Users, related_name='uaddress')
class UserPhone(models.Model):
phone = models.CharField(max_length=10)
user_id = models.ForeignKey(Users, related_name='uphone')
class UserPastProfession(models.Model):
profession = models.CharField(max_length=10) # BusinessMan, software Engineer, Artist etc.
user_id = models.ForeignKey(Users, related_name='uprofession')
すべてのユーザーの詳細が1つのPOSTエンドポイントにまとめられています。
{
'first_name': 'first_name',
'middle_name': 'middle_name',
'last_name': 'last_name',
'gender': 'gender',
'address': [{
'line1': 'line1',
'line2': 'line2',
'address_type': 'address_type',
}],
'phone': ['phone1', 'phone2'],
'profession': ['BusinessMan', 'Software Engineer', 'Artist']
}
DRFを使用しなければ、私はUserAddress
、UserPhone
とUserPastProfession
オブジェクトとそれを結ぶ、最初Users
オブジェクトを作っているだろう。
DRFを使用して同じことを行う方法は?私はvalidating
、serializing
を意味して、詳細を保存します。 serializers.pyファイルの見た目は?
を通過してください、あなたはDRF見てきましたクイックスタートガイドとシリアライザに関するセクション(ネストされたシリアライザを読む)シリアライザを作成している特定の問題がありますか?これは、「誰かが私のコードのシリアライザを書いてくれますか?」と解釈される可能性があります。 –
@JonClements - 私はシリアライザを書こうとしましたが、同じことがDjangoの生のコマンド(少ないコード)を使って行うことができるときには、その使い方を理解できません。私は誰にもコードを書くよう求めているわけではありませんが、同じものの使い方を比較して理解したかっただけです。 – PythonEnthusiast
そして常にネストすることはできません。それはできますか?電話、住所、職種の詳細が、関連付けられたユーザーIDを使用して異なるエンドポイントでPOSTされている場合はどうなりますか?まだネストされたserialzersになりますか? – PythonEnthusiast