QuerySet: фильтр для записей - PullRequest
0 голосов
/ 11 ноября 2019

Я хочу показать все ответы для question__focus=QuestionFocus.REASON_FOR_ATTENDING, где question__focus=QuestionFocus.RECOMMENDATION_TO_FRIENDS -> = 9. Поле ответа не является целочисленным полем, а TextField, поскольку все вопросы имеют одну и ту же модель ответов. Я много пробовал, но пока у меня ничего не получалось.

Сначала я попытался перейти от модели Ответа, но это также не сработало, поскольку я фильтрую ответы, отличные от того, что я хочу показать наконец.

event = Event.objects.get(pk=12)
survey = event.surveys.get(
    template=settings.SURVEY_POST_EVENT
).questions.[HOW TO CONTINUE?]

models.py

class Survey(TimeStampedModel):
    class SurveyTemplate(Choices):
        CHOICES = ((survey, survey) for survey in settings.SURVEY_TEMPLATES.keys())

    id = models.UUIDField(primary_key=True, editable=False, default=uuid.uuid4)
    event = models.ForeignKey(
        "events.Event", on_delete=models.CASCADE, related_name="surveys"
    )
    is_active = models.BooleanField(default=False, verbose_name=_("Is active?"))
    template = models.CharField(
        max_length=SurveyTemplate.get_max_length(),
        choices=SurveyTemplate.CHOICES,
        verbose_name=_("Survey template"),
    )

class Response(TimeStampedModel):
    class Language(Choices):
        CHOICES = settings.LANGUAGES

    survey = models.ForeignKey(
        "surveys.Survey", on_delete=models.CASCADE, related_name="responses"
    )
    order = models.ForeignKey(
        "orders.Order",
        on_delete=models.SET_NULL,
        null=True,
        blank=True,
        related_name="response",
    )
    attendee = models.ForeignKey(
        "attendees.Attendee",
        on_delete=models.SET_NULL,
        null=True,
        blank=True,
        related_name="response",
    )
    total_time = models.PositiveIntegerField(
        null=True, blank=True, verbose_name=_("Total time")
    )
    ip_address = models.GenericIPAddressField(null=True, verbose_name=_("IP Address"))
    language = models.CharField(
        max_length=Language.get_max_length(),
        choices=Language.CHOICES,
        verbose_name=_("Language"),
    )

class Answer(TimeStampedModel):
    question = models.ForeignKey(
        "surveys.Question", on_delete=models.CASCADE, related_name="answers"
    )
    response = models.ForeignKey(
        "Response", on_delete=models.CASCADE, related_name="answers"
    )
    answer = models.TextField(verbose_name=_("Answer"))
    choices = models.ManyToManyField(
        "surveys.AnswerOption", related_name="answers", blank=True
    )

class Question(TimeStampedModel):
    survey = models.ForeignKey(
        "surveys.Survey", on_delete=models.CASCADE, related_name="questions"
    )
    question_set = models.ForeignKey(
        "QuestionSet", on_delete=models.CASCADE, related_name="questions"
    )
    title = models.CharField(max_length=100, verbose_name=_("Title"))
    help_text = models.TextField(null=True, blank=True, verbose_name=_("Help text"))
    type = models.CharField(
        max_length=QuestionType.get_max_length(),
        choices=QuestionType.CHOICES,
        verbose_name=_("Question type"),
    )
    focus = models.CharField(
        max_length=QuestionFocus.get_max_length(),
        choices=QuestionFocus.CHOICES,
        verbose_name=_("Question focus"),
    )
    required = models.BooleanField(default=False, verbose_name=_("Is required?"))
    position = models.PositiveSmallIntegerField(
        null=True, blank=True, verbose_name=_("Position")
    )
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...