python - 如何在 Django get_context_data 方法中访问模型的外部集合的元素?

标签 python django generics view model

我在 Django 1.9.7 中有一个通用的 DetailView,它使用我的模型 Quiz 来显示 super 省时的无麻烦 View (谢谢 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'

P.S.我发现很明显我对 Django 比较陌生 - 对于任何愚蠢的错误表示歉意。

最佳答案

您引用的是模型,您需要引用实例( View 显示其详细信息的对象),因为关系是针对实例的,而不是针对实例的楷模。您可以使用 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

关于python - 如何在 Django get_context_data 方法中访问模型的外部集合的元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37847610/

相关文章:

c# - 如何编写包装类以使用部分泛型类型推断?

python - 将 Python 生成器解压为参数——内存效率高吗?

python - numpy.genfromtxt : Ambiguous delimiters?

python - 基于 django 类的 View get_context_data 得到了一个意外的关键字参数

javascript - 如何在 Django 中使用 Sass 以及版本控制 CSS 和 JS Assets 以清除缓存

java - 通用接口(interface)多态类型转换错误

Python - itertools.groupby

python - 对 Django 通用 View 有点困惑

python - Celery 为每个任务创建一个新连接

c# - 通用函数和值类型