route - python graficos 2d
Función personalizada que realiza creación y actualización en DRF modelViewSet (2)
Bueno, según los comentarios, parece que quieres actualizar un modelo no relacionado cuando creas tu modelo de reproducción. Esto debería ser fácil.
class BreedingViewSet(viewsets.ModelViewSet): queryset = Breeding.objects.all() serializer_class = BreedingSerializer def create(self, request): # do your thing here return super().create(request)
Hola, deseo crear un método personalizado en un modelviewset
que necesite realizar una lógica de guardado y actualización en una única solicitud de publicación.
Aquí está mi breeding.viewsets.py
class BreedingViewSet(viewsets.ModelViewSet):
queryset = Breeding.objects.all()
serializer_class = BreedingSerializer
Dado que el método anterior tiene un mayor nivel de abstracción y en realidad está proporcionando o realizando funciones CRUD automáticas.
Ahora el problema aquí es que no tengo ningún control para múltiples consultas como guardar un objeto y actualizar otro objeto en una sola solicitud de publicación.
p.ej
def save_and_update(self, request):
// do save an object here.
// do update an object here.
¿Cómo podemos lograr esas funcionalidades tan poderosas? ¿Me perdí algo? Encontré esta documentación pero no sé cómo implementar la instrucción dada.
ACTUALIZAR
Esto es lo que estoy buscando ¿Cómo creo varias instancias de modelo con Django Rest Framework?
Pero la respuesta solo puede save
varias instancias en una sola solicitud de publicación de ese mismo modelo. Pero también espero que podamos realizar consultas para diferentes modelos en esa única función.
Use esto para crear o actualizar usando 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)