[英]How do I override viewsets.ModelViewSet in Django REST Framework?
So my model is simple as所以我的 model 很简单
class Face(models.Model):
uid = models.CharField(max_length=510, primary_key=True)
photo = models.ImageField(upload_to='face_photos')
serializer串行器
class FaceSerializer(serializers.HyperlinkedModelSerializer):
class Meta:
model = Face
fields = ['uid', 'photo']
extra_kwargs = {'uid': {'required': True}, 'photo': {'required': True}}
and view should be something like和视图应该是这样的
class FaceViewSet(viewsets.ModelViewSet):
queryset = Face.objects.all()
serializer_class = FaceSerializer
permission_classes = [permissions.AllowAny]
And it works.它有效。 However:
然而:
uid
exists then update, else create... as well other processing.uid
存在则更新,否则创建......以及其他处理。 How do I achieve this all not loosing all the goodies that viewsets.ModelViewSet
provides, like validations, auto generated HTML fields in Rest API web view, etc? How do I achieve this all not loosing all the goodies that
viewsets.ModelViewSet
provides, like validations, auto generated HTML fields in Rest API web view, etc?
This worked for me:这对我有用:
class FaceViewSet(mixins.CreateModelMixin, mixins.RetrieveModelMixin, GenericViewSet):
"""
API endpoint for adding and processing new client (by uid) face
"""
queryset = Face.objects.all()
serializer_class = FaceSerializer
permission_classes = [permissions.AllowAny]
def create(self, request):
if "uid" in request.POST:
try:
instance = Face.objects.get(pk=request.POST['uid'])
serializer = FaceSerializer(
instance=instance,
data=request.data
)
except Face.DoesNotExist:
serializer = FaceSerializer(data=request.data)
else:
serializer = FaceSerializer(data=request.data)
serializer.is_valid(raise_exception=True)
serializer.save()
return Response(serializer.data)
def retrieve(self, request, *args, **kwargs):
instance = self.get_object()
serializer = FaceSerializer(instance=instance)
return Response(serializer.data)
for number one you can use this:对于第一,你可以使用这个:
http_method_names = ['get','post']
buth get method also cintains list method但是 get 方法也包含 list 方法
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.