Django REST Framework: define fields in nested object?

后端 未结 3 1725
Happy的楠姐
Happy的楠姐 2020-12-23 23:11

I got events that happen at locations:

class Event(models.Model):
    title = models.CharField(max_length=200)
    date_published = models.DateTimeField(\'pu         


        
3条回答
  •  渐次进展
    2020-12-24 00:08

    I found this question when I was trying to figure out how to exclude certain fields from a serializer only when it was being nested. Looks like Tasawer Nawaz had that question as well. You can do that by overriding get_field_names. Here's an example based on Tom Christie's answer:

    class LocationSerializer(serializers.ModelSerializer):
        class Meta:
            model = Location
            fields = (...)
            exclude_when_nested = {'location_title', 'location_date_published'}  # not an official DRF meta attribute ...
    
        def get_field_names(self, *args, **kwargs):
            field_names = super(LinkUserSerializer, self).get_field_names(*args, **kwargs)
            if self.parent:
                field_names = [i for i in field_names if i not in self.Meta.exclude_when_nested]
            return field_names
    
    class EventSerializer(serializers.HyperlinkedModelSerializer):
        id = serializers.Field()
        location = LocationSerializer()
    
        class Meta:
            model = Event
            fields = ('url','id','title','date_start','date_end','description', 'price', 'location')
    

提交回复
热议问题