0
0

More than 3 years have passed since last update.

property フィールドでデシリアライズする(問題未解決)

Last updated at Posted at 2020-03-10

次の用なモデルを定義する:

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' の例外が飛ぶ。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0