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.