django rest framework - rest_framework - Marco Django REST, obtén el objeto de la URL
pip3 install rest_framework (2)
Me pregunto si hay una manera limpia de recuperar un objeto de su URL con el marco de trabajo django. Seguramente debería haberlo, ya que parece ser lo que está sucediendo al usar HyperlinkedRelatedField
.
Por ejemplo, tengo esta URL /api/comment/26
como una cadena. Desde mi punto de vista, ¿cómo puedo obtener la instancia de comentario con pk=26
?
Por supuesto, podría volver a hacer el trabajo y trabajar en la cuerda, pero debe ser una mejor manera.
Muchas gracias.
EDITAR:
Así es como lo resolví al final:
resolve(''/api/comment/26/'').func.cls.model
devolverá mi modelo Comment. resolve(''/api/category/1/'').kwargs[''pk'']
devolverá el pk.
Lo que te da:
from django.core.urlresolvers import resolve
resolved_func, unused_args, resolved_kwargs = resolve(''/api/category/1/'')
resolved_func.cls.model.objects.get(pk=resolved_kwargs[''pk''])
Con las vistas basadas en clase, parece necesario algo como lo siguiente:
resolve(url).func.cls.serializer_class.Meta.model.objects.get(
**resolve(url).kwargs)
Sospecho que su mejor opción sería mantener manualmente un mapa de modelos con patrones de URL, no muy diferente de un URLConf
.
Si eso no balancea tu barco, podrías pasar el camino hacia la resolve
.
Esto le dará un ResolverMatch
en el que encontrará la func
devuelta por la llamada as_view
cuando configure sus URL.
El atributo __name__
de su función de vista será el de su clase de vista original. Haz algo como globals()[class_name]
para obtener la clase en sí.
Desde allí acceda al atributo del model
.
Espero que eso ayude. Como digo, es posible que desee asignar modelos a las URL usted mismo.