Django REST framwork 3.1 - PUT-as-create mixin class, custom lookup_field

423 Views Asked by At

Making use of the PUT-as-create mixin class provided HERE (class AllowPUTAsCreateMixin):

class Tree(models.Model):   
   myfield = models.CharField(max_length=100,unique=True)
   species = models.CharField(max_length=100, blank=True, default='')
class TreeSerializer(serializers.ModelSerializer):
    class Meta:
        model = Tree
        fields = ('myfield', 'species')
        lookup_field = 'myfield'
class TreeView(viewsets.ModelViewSet, AllowPUTAsCreateMixin):

     queryset = Tree.objects.all()
     serializer_class = TreeSerializer
     lookup_field = 'myfield'

     def update(self, request, myfield=None):
        return AllowPUTAsCreateMixin.update(self, request, lookup_field='myfield')
class AllowPUTAsCreateMixin(object):

     def update(self, request, *args, **kwargs):
          lookup_field = kwargs.pop('lookup_field')

when submitting data as JSON (using httpie):

http PUT 127.0.0.1:8000/xxx/trees/123456 < tree.json

Object is created and exposed @/.../trees/{myfield}

Done!

1

There are 1 best solutions below

0
On BEST ANSWER

My mistake was from poor understanding from making correct use of the kwargs. I corrected my code in the question post.

Thanks!