Hi there I want to create a custom method in a modelviewset
which needs to perform a save and an update logic in a single post request.
Here is my breeding.viewsets.py
class BreedingViewSet(viewsets.ModelViewSet):
queryset = Breeding.objects.all()
serializer_class = BreedingSerializer
Since the above method has a higher level of abstraction and is actually providing or performing automatic CRUD functions.
Now the problem here is i dont have any control for a multiple queries like saving an object and updating another object in a single post request.
e.g
def save_and_update(self, request):
// do save an object here.
// do update an object here.
How can we achieve such powerful functionalities? Did i missed something? I found this documentation but i dont know how to implement the given instruction.
UPDATE
This is what im looking for How do I create multiple model instances with Django Rest Framework?
But the answer can only save
a multiple instances in a single post request of that same model. But Im hoping also that we can perform queries for a different models in that single function.
Well, from the comments, it looks like you want to update some unrelated model when you create your breeding model. This should be easy.
class BreedingViewSet(viewsets.ModelViewSet): queryset = Breeding.objects.all() serializer_class = BreedingSerializer def create(self, request): # do your thing here return super().create(request)
Use this to create or update using 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)
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With