Tuesday, 15 January 2013

Django REST Serializer and unique_together and from_native -



Django REST Serializer and unique_together and from_native -

i having problem using slugrelatedfield deserialize field part of unique_together set.

to given example, have blog model has title , author. tuple of these uniquely identify blog (as in title unique given author, not unique site wide). want blog message containing these values.

in order deserialize message (i.e. from_native), slugrelatedfield calls: self.queryset.get(**{self.slug_field: data}) fail on title slug because not globally unique. can solved providing more limited queryset (ie 1 contains blogs user), not sure how/where best place set queryset in field (because not know author until deserializing field).

one thought own deserialization of author in get_fields filter queryset blog. code pretty ugly, results in deserialization of author twice, , has issues when serializer used list view (as opposed detail view).

you need set queryset field @ runtime.

you can in serialiser, like:

class myobjectserializer(serializers.hyperlinkedmodelserializer): def get_fields(self, *args, **kwargs): fields = super(myobjectserializer, self).get_fields(*args, **kwargs) fields['slug'].queryset = myobject.objects.filter(self.context['view'].request.user) homecoming fields

or in view as:

def get_serializer(self): serializer = super(myobjectview, self).get_serializer() serializer.fields['slug'].queryset = myobject.objects.filter(self.request.user)

it's same thing — you're setting queryset on slug field 1 time have reference current user — it depends on best you.

i hope helps.

django django-rest-framework

No comments:

Post a Comment