我在 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/