class CitySerializer(HyperlinkedModelSerializer): """ HyperlinkedModelSerializer for City. """ url = relations.HyperlinkedIdentityField( view_name='cities-light-api-city-detail') country = relations.HyperlinkedRelatedField( view_name='cities-light-api-country-detail') region = relations.HyperlinkedRelatedField( view_name='cities-light-api-region-detail') class Meta: model = City
class SubRegionSerializer(HyperlinkedModelSerializer): """ HyperlinkedModelSerializer for SubRegion. """ url = relations.HyperlinkedIdentityField( view_name='cities-light-api-city-detail') country = relations.HyperlinkedRelatedField( view_name='cities-light-api-country-detail', read_only=True) region = relations.HyperlinkedRelatedField( view_name='cities-light-api-region-detail', read_only=True) class Meta: model = SubRegion exclude = ('slug', )
class FormResponseSerializer(serializers.HyperlinkedModelSerializer): url = NestedHyperlinkedIdentityField(view_name='form-response-detail', lookup_field='id', parent_lookup_kwargs={ 'form_slug': 'form__slug', }) form = relations.HyperlinkedRelatedField(view_name='form-detail', read_only=True, lookup_field='slug') def create(self, validated_data): form = Form.objects.get(slug=self.context['view'].kwargs['form_slug']) validated_data['form'] = form return super().create(validated_data) class Meta: fields = ( 'url', 'form', 'values', # 'created_by', 'created_at', 'updated_at', ) read_only_fields = ( 'created_at', 'updated_at', ) model = FormResponse
def to_representation(self, value): result = {} for link in self.hyperlink_data: label = link['label'] kwargs = copy.copy(link) del kwargs['label'] field = relations.HyperlinkedRelatedField(read_only=True, **kwargs) # fake the request into the context so the URL can be constructed field._context = {'request': self.context.get('request', None)} result[label] = field.to_representation(value) return result
class DraftSerializer(serializers.ModelSerializer): """Serializer for Drafts, appropriate for list views. No files metadata.""" class Meta: model = Draft queryset = Draft.objects.all().select_related('bundle') fields = ('uuid', 'url', 'bundle', 'bundle_uuid', 'name') url = relations.HyperlinkedIdentityField( lookup_field='uuid', view_name='api:v1:draft-detail', ) bundle = relations.HyperlinkedRelatedField( lookup_field='uuid', lookup_url_kwarg='bundle_uuid', view_name='api:v1:bundle-detail', read_only=True, ) bundle_uuid = relations.SlugRelatedField( source='bundle', slug_field='uuid', queryset=Bundle.objects.all(), )