如何在 Django get_context_data 方法中访问模型的外国座位的元素?

Posted

技术标签:

【中文标题】如何在 Django get_context_data 方法中访问模型的外国座位的元素?【英文标题】:How can I access the elements of a foreign set for a model in Django's get_context_data method? 【发布时间】:2016-06-15 23:47:42 【问题描述】:

我在 Django 1.9.7 中有一个通用的 DetailView,它使用我的模型 Quiz 来显示一个超级省时的无障碍视图(感谢 Django)。但是,我很难访问我的Quiz 对象(一组QuizQuestion 对象)上的相关外键集。我的模型如下:

class QuizQuestion(models.Model):
    quiz = models.ForeignKey(Quiz, on_delete=models.CASCADE)
    question = models.ForeignKey(Question, on_delete=models.CASCADE)
    question_index = models.IntegerField()
    user_answer_text = models.CharField(max_length=1000)
    date_answered = models.DateTimeField(null=True)
    user_is_correct = models.NullBooleanField()

    def __str__(self):
        return self.user_answer_text

这是我的观点:

class QuizDetail(generic.DetailView):
model = Quiz

def get_context_data(self, **kwargs):
    context = super(QuizDetail, self).get_context_data(**kwargs)

    # Pass/fail chart
    passed_questions = self.model.quizquestion_set.objects.filter(user_is_correct=True)

    # ...

    return context

这给了我'ReverseManyToOneDescriptor'对象没有属性'objects'

我不确定尝试使用_set 获取相关对象是否比长途跋涉并要求QuizQuestion.objects.filter(...) 更可取,但我在此基础上进行操作。如果我弄错了,请纠正我:)

self.model.quizquestion_set.filter(user_is_correct=True) 给出:''ReverseManyToOneDescriptor' 对象没有属性'filter''

passed_questions = self.model.quizquestion_set.all() 给出 'ReverseManyToOneDescriptor' 对象没有属性 'all'

附注我发现很明显我对 Django 比较陌生 - 为任何愚蠢的错误道歉。

【问题讨论】:

请同时添加您的型号 【参考方案1】:

您指的是 model,您需要引用 instance(视图为其显示详细信息的对象),因为关系用于实例而不是楷模。你可以通过self.get_object()获取实例:

def get_context_data(self, **kwargs):
    context = super(QuizDetail, self).get_context_data(**kwargs)
    obj = self.get_object()
    passed_questions = obj.quizquestion_set.filter(...)
    return context

【讨论】:

以上是关于如何在 Django get_context_data 方法中访问模型的外国座位的元素?的主要内容,如果未能解决你的问题,请参考以下文章

Django:如何告诉 Django 它应该在哪里寻找应用程序?

如何在双连接关系之后在 Django 中执行查询(或:如何绕过 Django 对多对多“通过”模型的限制?)

如何在django查看一个group里的所有user

Django如何使文件在django自动执行

如何在 Django 2 中实现 Django-Private-Chat

Django DRY - 如何在 Django 模板中扩展两个 .html 文件?