简体   繁体   中英

Django: Pass filter to custom QuerySet

Is there a way to pass _filter to the QuerySet Manager as I try here? Currently, I always receive the error message too many values to unpack (expected 2) .

def get_super_guests(self):
    _filter = "answers__choices__answer='Very disappointed', answer_NPS__gte=9"
    return Response.objects.get_super_guests(self.request.event.pk, _filter)


class ResponseQuerySet(models.QuerySet):
    def get_super_guests(self, event_pk, _filter):
        return (
            self.filter(
                survey__event=event_pk,
                survey__template=settings.SURVEY_POST_EVENT,
                answers__question__focus__in=[
                    QuestionFocus.FEELING_ABOUT_ATTENDING_AGAIN,
                    QuestionFocus.RECOMMENDATION_TO_FRIENDS,
                ],
            )
            .annotate(
                answer_NPS=Case(
                    When(
                        answers__question__focus=QuestionFocus.RECOMMENDATION_TO_FRIENDS,
                        then=Cast(
                            'answers__answer', output_field=IntegerField()
                        )
                    )
                )
            )
            .filter(
                _filter
            )
        )

Sorry, I just figured out a better way. Works perfectly:)

def get_super_guests(self):
    return Response.objects.get_super_guests(self.request.event.pk).filter(
        answers__choices__answer="Very disappointed",
        answer_NPS__gte=9,
    )

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM