シリアライザのcreate()
メソッドをオーバーライドするはずですが、DRFがvalidate_data.get('some_field', None)
の実際の値を取得できない理由を理解できません。validated_data.get()の値が正しく取得されていません
私のモデルです。
class Heat(models.Model):
# Fields
performer = models.CharField(max_length=25)
is_bred = models.BooleanField(default=False)
note = models.TextField(max_length=250, blank=True, null=True)
class Breeding(models.Model):
# Relationship Fields
heat = models.OneToOneField(
Heat,
on_delete=models.CASCADE)
# Fields
performer = models.CharField(max_length=25)
remarks = models.TextField(max_length=255, blank=True, null=True)
そしてここでは、ここに私のvalidated_dataがあるように見える私のシリアライザクラス
class BreedingSerializer(serializers.ModelSerializer):
def create(self, validated_data):
heat_id = validated_data.get('heat', None)
heat = Heat.objects.get(pk=heat_id)
breeding = Breeding.objects.create(**validated_data)
return breeding
class Meta:
model = Breeding
fields = ['id', 'heat', 'performer', 'remarks']
です。
{
"heat": 1,
"performer": "Some person",
"remarks": "testing"
}
私はそれが熱整数1
として提供'Heat Object'
ない実データとしての値を得heat_id
を印刷しよう。このコードではうまく動作しますbreeding = Breeding.objects.create(**validated_data)
。
誰でも説明できますか?
返答いただきありがとうございますが、どうやってこれを元気にすることができますか?または熱を実際の値にするために可能な方法は何ですか? –
'validated_data ['heat']'は既にあなたに必要なオブジェクトを与えていますので、単に 'create'メソッドの最初の行を取り除くことができます。オブジェクトのPKを別のものにしたいのであれば、 'validated_data ['heat'] .pk'を実行するだけです。 – lucasnadalutti
あなたは私の時間を救う!答えをありがとう!そして私は今、明らかに理解しています。 –