我有这个ModelViewset和一个ModelSerializer
class GenerarFacturaViewset(viewsets.ModelViewSet):
serializer_class = serializer.FacturaSerializer
def get_queryset(self):
self.queryset = []
_nro = self.request.query_params.get('nro', None)
venta_id = self.request.query_params.get('ventaid', None)
if (venta_id is None or _nro is None):
raise exceptions.ParseError("Parametros invalidos")
nro = int(_nro)
venta = models.Venta.objects.get(id=venta_id)
if models.Factura.objects.filter(numero=nro):
raise exceptions.ParseError("Ya existe una factura con ese numero")
venta.generar_factura(nro)
print("Factura generada con nro: ", nro)
self.queryset = models.Factura.objects.filter(numero=nro)
return self.queryset
Run Code Online (Sandbox Code Playgroud)
然后,当第一次调用此ModelViewset时,每次正常工作直到返回句子,然后再次调用get_queryset方法.我想知道为什么?
其他细节是,当在第一个get_queryset调用中引发第二个异常时,这将显示为rest框架普通模板,但如果在第二个调用中引发它,则会在django错误模板中显示回溯和错误消息.
提前致谢
编辑:我发现了一个最好的方法,我希望Linovia的答案是正确的,然后我改善了一些事情.
为了澄清,我需要两个参数"venta_id"和"numero"来创建一个对象"factura".在我的第一次尝试中,我尝试从请求数据中获取此参数,验证它并调用模型方法来创建对象.全部都在get_queryset方法上.但我认为这不是一个好方法.
然后我为这个porpuse创建一个新视图和一个序列化器.
class AddProductoViewset(viewsets.ModelViewSet):
serializer_class = serializer.AddProductoSerializer
queryset = models.Venta.objects.all()
http_method_names = ['post', 'head']
def create(self, request, *args, …Run Code Online (Sandbox Code Playgroud)