次の用なモデルを定義する:
class Drink(models.Model):
name = models.CharField()
def get_volumes(self):
return [int(dc.volume) for dc in self.drinkcontainer_set.all()]
def set_volumes(self. volumes_list):
for vol in volumes_list:
dc = DrinkContainer(drink=self, volume=vol)
dc.save()
volumes = property(get_volumes, set_volumes)
class DrinkContainer(models.Model):
drink = models.ForeignKey(Drink)
volume = models.IntegerField()
そして DRF serializer
class DrinkSerializer(serializers.ModelSerializer):
volumes = serializers.StringRelatedField(many=True, read_only=True)
class Meta:
model = Drink
fields = ('name', 'volumes')
manage.py dumpdata --natural-foreign で、このように JSON にシリアライズできる:
{
"name":["Orangina"],
"volumes":["250", "400"]
}
これをデシリアライズ(なんて単語なんだ、これ)し、"Orangina" の Drink オブジェクトそして二つの DrinkContainer オブジェクトを生成したい。
manage.py loaddata をすると、FieldDoesNotExist: Drink has no field named 'volumes' の例外が飛ぶ。