es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

No existe: no hay ninguna consulta que coincida.

Tengo esta vista basada en clases de Django donde intento sobrescribir la función get_queryset porque quiero obtener los valores insertados desde el frontend para buscar en mi base de datos el tema con ese nombre y luego obtener el id. Pero cuando llamo a la vista, me muestra “Subject matching query does not exist.” porque subject_val es None. Eso tiene sentido porque el usuario aún no ha enviado los valores.. entonces, ¿cómo puedo hacer que espere hasta que el usuario haya elegido “enviar”?

class AttendanceList(LoginRequiredMixin, ListView):
    model = AttendanceLog
    template_name = "./attendancecode/showattendance.html"

    def get_queryset(self):
        class_val = self.request.GET.get('class')
        subject_val = self.request.GET.get('subject')
        sub = Subject.objects.get(name=subject_val).id
        new_context = get_statstic(class_val, sub)
        return new_context

    def get_context_data(self, **kwargs):
        context = super(AttendanceList, self).get_context_data(**kwargs)
        context['class'] = self.request.GET.get('class')
        context['subject'] = self.request.GET.get('subject')
        return context

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Para esperar hasta que el usuario haya enviado los valores, puedes agregar una comprobación en tu función get_queryset para ver si subject_val es None, y si lo es, simplemente devuelve un queryset vacío o None. Esto evitará que se produzca el error “Subject matching query does not exist”. Una vez que el usuario envíe los valores, puedes llamar nuevamente a la función get_queryset con los valores actualizados.

    Aquí tienes un ejemplo de cómo puedes modificar tu función get_queryset:

    def get_queryset(self):
        class_val = self.request.GET.get('class')
        subject_val = self.request.GET.get('subject')
        if subject_val is None:
            return None  # o devuelve un queryset vacío
        sub = Subject.objects.get(name=subject_val).id
        new_context = get_statstic(class_val, sub)
        return new_context
    

    De esta manera, la función devolverá None si el usuario no ha enviado ningún valor todavía, y solo ejecutará la consulta de búsqueda si subject_val no es None.

Comments are closed.