简体   繁体   中英

Django rest framewor deal with many=True serializer data to list

I get data like this.

{
    "id": 1,
    "fields": [
        {"id": 1, "name": "att1"},
        {"id": 2, "name": "att2"}
    ]
}

And I need fields without keys like fields: ["att1", "att2"] .

I could use SerializerMethod do this. Is there some method like source='form.fields.name' ?

CharField(source='form.fields.name') not work with many=True objects.

Code:


class EavForm(models.Model):
    name = models.CharField(max_length=300)

class EavAttribute(models.Model):
    form = models.ForeignKey(EavForm, on_delete=models.CASCADE, related_name='fields')
    name = models.CharField(max_length=300)

class EavAttributeSerializer(serializers.ModelSerializer):
    class Meta:
        model = EavAttribute
        fields = '__all__'


class EavFormSerializer(serializers.ModelSerializer):
    fields = EavAttributeSerializer(many=True)

    class Meta:
        model = EavForm
        fields = '__all__'

I have a EavValue object related_to EavForm. How get fields like eav_value_obj.fields as a list?

class EavValue(models.Model):
    form = models.ForeignKey(EavForm, on_delete=models.CASCADE, related_name='values')
    fields = serializers.SlugRelatedField(
        many=True,
        read_only=True,
        slug_field='form.fields.name' # not work like this. 
    )

You can use SlugRelatedField :

class EavFormSerializer(serializers.ModelSerializer):
    fields = serializers.SlugRelatedField(
        many=True,
        read_only=True,
        slug_field='name'
    )

    class Meta:
        model = EavForm
        fields = '__all__'

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM