您好,我想在modelviewset
中创建一个自定义方法,该方法需要在一个帖子请求中执行保存和更新逻辑。
这是我的breeding.viewsets.py
class BreedingViewSet(viewsets.ModelViewSet):
queryset = Breeding.objects.all()
serializer_class = BreedingSerializer
由于上述方法具有更高的抽象级别,因此 实际上提供或执行自动CRUD功能。
现在的问题是我对多个查询没有任何控制权,例如保存对象和在一个帖子请求中更新另一个对象。
e.g
def save_and_update(self, request):
// do save an object here.
// do update an object here.
我们如何才能实现如此强大的功能?我错过了什么吗?我发现了这个documentation,但我不知道如何实现给定的指令。
更新
这就是我正在寻找的How do I create multiple model instances with Django Rest Framework?
但答案只能save
同一模型的单个帖子请求中的多个实例。但我也希望我们可以在单一功能中对不同的模型执行查询。
答案 0 :(得分:5)
嗯,从评论中看,您希望在创建育种模型时更新一些不相关的模型。这应该很容易。
class BreedingViewSet(viewsets.ModelViewSet): queryset = Breeding.objects.all() serializer_class = BreedingSerializer def create(self, request): # do your thing here return super().create(request)
答案 1 :(得分:1)
使用此选项可以使用 POST
创建或更新class BreedingViewSet(viewsets.ModelViewSet):
queryset = Breeding.objects.all()
serializer_class = BreedingSerializer
def get_object(self):
if self.action == 'create':
queryset = self.filter_queryset(self.get_queryset())
filter_kwargs = {self.lookup_field: self.request.data.get('id')}
obj = get_object(queryset, **filter_kwargs)
self.check_object_permissions(self.request, obj)
return obj
else:
return super(BreedingViewSet, self).get_object()
def create(self, request, *args, **kwargs):
if request.data.get('id'):
return super(BreedingViewSet, self).update(request, *args, **kwargs)
else:
return super(BreedingViewSet, self).create(request, *args, **kwargs)