簡體   English   中英

Django:object 沒有屬性“注釋”

[英]Django: object has no attribute 'annotate'

我的目標是獲得兩個數字“total”和“num_very_disappointed”。 目前,我總是收到以下錯誤消息: AttributeError: 'Question' object has no attribute 'annotate'

你知道我做錯了什么嗎?

very_disappointed = Count('answers', filter=Q(answers__choices__answer="Somewhat disappointed"))
answers = Question.objects.get(
    focus=QuestionFocus.FEELING_ABOUT_ATTENDING_AGAIN,
    survey__event=12,
    survey__template=settings.SURVEY_POST_EVENT,
).annotate(total=Count('answers'), num_very_disappointed=very_disappointed)

模型.py

   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")
    )

    # Translatable fields
    i18n = TranslationField(fields=("title", "help_text"))

    class Meta:
        ordering = ("position", "pk")


class AnswerOption(TimeStampedModel):


    question = models.ForeignKey(
        "Question", on_delete=models.CASCADE, related_name="options"
    )
    answer = models.TextField(verbose_name=_("Answer"))
    position = models.PositiveSmallIntegerField(
        null=True, blank=True, verbose_name=_("Position")
    )

    # Translatable fields
    i18n = TranslationField(fields=("answer",))

    class Meta:
        ordering = ("position", "pk")

您應該使用filter而不是get

Question.objects.filter(...).annotate(...)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM