Django REST 框架 3.1 - PUT-as-create mixin class,自定义 lookup_field
Django REST framwork 3.1 - PUT-as-create mixin class, custom lookup_field
利用 PUT-as-create mixin class 提供 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')
当以 JSON 提交数据时(使用 httpie):
http PUT 127.0.0.1:8000/xxx/trees/123456 < tree.json
对象已创建并公开 @/.../trees/{myfield}
完成!
我的错误是由于对 kwargs 的正确使用理解不足。
我在问题 post.
中更正了我的代码
谢谢!
利用 PUT-as-create mixin class 提供 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')
当以 JSON 提交数据时(使用 httpie):
http PUT 127.0.0.1:8000/xxx/trees/123456 < tree.json
对象已创建并公开 @/.../trees/{myfield}
完成!
我的错误是由于对 kwargs 的正确使用理解不足。 我在问题 post.
中更正了我的代码谢谢!